nuxeo-development-framework 2.0.9 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +8683 -454
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +84 -0
  4. package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
  5. package/esm2015/lib/components/activities-log/activities-log.module.js +30 -0
  6. package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
  7. package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
  8. package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
  9. package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
  10. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
  11. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
  12. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
  13. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
  14. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
  15. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +177 -0
  16. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +43 -0
  17. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
  18. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
  19. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +132 -0
  20. package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +264 -0
  21. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +119 -0
  22. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +91 -0
  23. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +455 -0
  24. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +26 -0
  25. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +77 -0
  26. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +114 -0
  27. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +80 -0
  28. package/esm2015/lib/components/file-manger/components/move/move.component.js +108 -0
  29. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +111 -0
  30. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +86 -0
  31. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +314 -0
  32. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +294 -0
  33. package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +257 -0
  34. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +64 -0
  35. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +71 -0
  36. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +358 -0
  37. package/esm2015/lib/components/file-manger/file-manager.abstract.js +1031 -0
  38. package/esm2015/lib/components/file-manger/file-manger.module.js +295 -0
  39. package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
  40. package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
  41. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +177 -0
  42. package/esm2015/lib/components/permissions/permission.service.js +118 -0
  43. package/esm2015/lib/components/permissions/permissions/permissions.component.js +232 -0
  44. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +117 -0
  45. package/esm2015/lib/components/permissions/permissions.module.js +71 -0
  46. package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
  47. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
  48. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
  49. package/esm2015/lib/components/user/user/user.component.js +29 -0
  50. package/esm2015/lib/components/user/user.module.js +30 -0
  51. package/esm2015/lib/directive/directive.module.js +9 -4
  52. package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
  53. package/esm2015/lib/shared/libraryShared.module.js +1 -4
  54. package/esm2015/lib/shared-services/dialog-mangment.service.js +61 -0
  55. package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
  56. package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
  57. package/esm2015/lib/shared-services/file-manager.service.js +793 -0
  58. package/esm2015/lib/shared-services/global-pdftron.service.js +46 -0
  59. package/esm2015/lib/shared-services/mainfolder.service.js +160 -0
  60. package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
  61. package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
  62. package/esm2015/lib/shared-services/shared-docs.service.js +135 -0
  63. package/esm2015/lib/shared-services/shared-services.module.js +20 -0
  64. package/esm2015/lib/shared-services/upload-file.service.js +29 -0
  65. package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
  66. package/esm2015/lib/shared-services/user.service.js +54 -0
  67. package/esm2015/public-api.js +65 -1
  68. package/fesm2015/nuxeo-development-framework.js +7969 -154
  69. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  70. package/lib/components/activities-log/activities-log/activities-log.component.d.ts +23 -0
  71. package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
  72. package/lib/components/activities-log/activities-log.module.d.ts +10 -0
  73. package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
  74. package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
  75. package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
  76. package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
  77. package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
  78. package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
  79. package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
  80. package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
  81. package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
  82. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +137 -0
  83. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +12 -0
  84. package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
  85. package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
  86. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +31 -0
  87. package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +41 -0
  88. package/lib/components/file-manger/components/copy/copy.component.d.ts +32 -0
  89. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +24 -0
  90. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +108 -0
  91. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +11 -0
  92. package/lib/components/file-manger/components/delete/delete.component.d.ts +30 -0
  93. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +56 -0
  94. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +23 -0
  95. package/lib/components/file-manger/components/move/move.component.d.ts +32 -0
  96. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +32 -0
  97. package/lib/components/file-manger/components/rename/rename.component.d.ts +25 -0
  98. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +95 -0
  99. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +58 -0
  100. package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
  101. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +34 -0
  102. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +24 -0
  103. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +194 -0
  104. package/lib/components/file-manger/file-manager.abstract.d.ts +173 -0
  105. package/lib/components/file-manger/file-manger.module.d.ts +59 -0
  106. package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
  107. package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
  108. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +44 -0
  109. package/lib/components/permissions/permission.service.d.ts +21 -0
  110. package/lib/components/permissions/permissions/permissions.component.d.ts +48 -0
  111. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
  112. package/lib/components/permissions/permissions.module.d.ts +21 -0
  113. package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
  114. package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
  115. package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
  116. package/lib/components/user/user/user.component.d.ts +12 -0
  117. package/lib/components/user/user.module.d.ts +10 -0
  118. package/lib/directive/directive.module.d.ts +3 -2
  119. package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
  120. package/lib/shared/libraryShared.module.d.ts +1 -1
  121. package/lib/shared-services/dialog-mangment.service.d.ts +15 -0
  122. package/lib/shared-services/dynamic-form.service.d.ts +24 -0
  123. package/lib/shared-services/file-manager.adapter.d.ts +48 -0
  124. package/lib/shared-services/file-manager.service.d.ts +94 -0
  125. package/lib/shared-services/global-pdftron.service.d.ts +10 -0
  126. package/lib/shared-services/mainfolder.service.d.ts +32 -0
  127. package/lib/shared-services/publishing-document.service.d.ts +25 -0
  128. package/lib/shared-services/recently-viewed.service.d.ts +17 -0
  129. package/lib/shared-services/shared-docs.service.d.ts +21 -0
  130. package/lib/shared-services/shared-services.module.d.ts +7 -0
  131. package/lib/shared-services/upload-file.service.d.ts +10 -0
  132. package/lib/shared-services/upload-managment.service.d.ts +72 -0
  133. package/lib/shared-services/user.service.d.ts +12 -0
  134. package/package.json +7 -6
  135. package/public-api.d.ts +62 -0
@@ -0,0 +1,39 @@
1
+ import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/tabs";
4
+ import * as i2 from "@angular/material/icon";
5
+ import * as i3 from "@angular/common";
6
+ import * as i4 from "@ngx-translate/core";
7
+ export class DynamicTabsComponent {
8
+ constructor() {
9
+ this.tabs = [];
10
+ this.selectedIndex = 0;
11
+ }
12
+ ngOnChanges(changes) {
13
+ var _a;
14
+ if (((_a = changes.selectedIndex) === null || _a === void 0 ? void 0 : _a.currentValue) === 0) {
15
+ this.dynamicTabs.selectedIndex = this.selectedIndex; //for back to details tab after remove publishing tab when move from original version to one of its published version
16
+ }
17
+ }
18
+ ngOnInit() {
19
+ }
20
+ }
21
+ DynamicTabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
+ DynamicTabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: DynamicTabsComponent, selector: "app-dynamic-tabs", inputs: { tabs: "tabs", selectedIndex: "selectedIndex" }, viewQueries: [{ propertyName: "dynamicTabs", first: true, predicate: ["dynamicTabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-tab-group #dynamicTabs class=\"h-full\" *ngIf=\"tabs.length > 0\">\r\n <mat-tab *ngFor=\"let tab of tabs\"> \r\n <ng-template mat-tab-label class=\"flex flex-col items-center justify-center\">\r\n <mat-icon class=\"example-tab-icon\">{{tab.icon}}</mat-icon>\r\n <span>{{'tabs.' + tab.label | translate}}</span>\r\n </ng-template> \r\n <ng-template matTabContent>\r\n <ng-content *ngTemplateOutlet=\"tab.template\"></ng-content> \r\n </ng-template>\r\n </mat-tab>\r\n</mat-tab-group>", styles: [".mat-tab-group .mat-tab-header .mat-tab-header-pagination-before{display:none}.mat-tab-group .mat-tab-header .mat-tab-header-pagination-after{display:none}.mat-tab-group .mat-tab-header .mat-tab-label-container{padding:0!important;overflow-x:auto}.mat-tab-group .mat-tab-header .mat-tab-label-container .mat-tab-list{@apply min-w-100 !important;}.mat-tab-group .mat-tab-header .mat-tab-label-container .mat-tab-list .mat-tab-labels{height:50px}.mat-tab-group .mat-tab-header .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label{height:100%!important;border-bottom:1px solid lightgray;margin:0!important}.mat-tab-group .mat-tab-header .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label .mat-tab-label-content{display:flex;flex-direction:column;font-size:12px}.mat-tab-group .mat-tab-header .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label .mat-tab-label-content .mat-icon{font-size:20px;min-height:16px;min-width:16px;height:16px;width:16px}.mat-tab-group .mat-tab-header .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label-active{border-bottom:2px solid black;opacity:1}.mat-tab-group .mat-tab-body-wrapper{padding:0 10px!important;height:calc(100% - 60px)}.mat-tab-group .mat-tab-body-wrapper .mat-tab-body .mat-tab-body-content{padding:0;overflow:hidden}.theme-dgda .mat-tab-group .mat-tab-header .mat-tab-label-container{@apply bg-transparent;}\n"], components: [{ type: i1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i1.MatTabContent, selector: "[matTabContent]" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i4.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicTabsComponent, decorators: [{
24
+ type: Component,
25
+ args: [{
26
+ selector: 'app-dynamic-tabs',
27
+ templateUrl: './dynamic-tabs.component.html',
28
+ styleUrls: ['./dynamic-tabs.component.scss'],
29
+ encapsulation: ViewEncapsulation.None
30
+ }]
31
+ }], ctorParameters: function () { return []; }, propDecorators: { tabs: [{
32
+ type: Input
33
+ }], selectedIndex: [{
34
+ type: Input
35
+ }], dynamicTabs: [{
36
+ type: ViewChild,
37
+ args: ['dynamicTabs']
38
+ }] } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy10YWJzL2R5bmFtaWMtdGFicy9keW5hbWljLXRhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLXRhYnMvZHluYW1pYy10YWJzL2R5bmFtaWMtdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsaUJBQWlCLEVBQTRCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFTakgsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQjtRQUhTLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixrQkFBYSxHQUFHLENBQUMsQ0FBQztJQUVYLENBQUM7SUFDakIsV0FBVyxDQUFDLE9BQXNCOztRQUNoQyxJQUFJLENBQUEsTUFBQSxPQUFPLENBQUMsYUFBYSwwQ0FBRSxZQUFZLE1BQUssQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUEsQ0FBQyxxSEFBcUg7U0FDMUs7SUFDSCxDQUFDO0lBRUQsUUFBUTtJQUVSLENBQUM7O2lIQWJVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLG1QQ1RqQyw4aUJBVWdCOzJGRERILG9CQUFvQjtrQkFOaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsK0JBQStCO29CQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDNUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzBFQUVVLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNvQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy10YWJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLXRhYnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB0YWJzID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgQFZpZXdDaGlsZCgnZHluYW1pY1RhYnMnKSBkeW5hbWljVGFiczogTWF0VGFiR3JvdXA7XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEluZGV4Py5jdXJyZW50VmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy5keW5hbWljVGFicy5zZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4IC8vZm9yIGJhY2sgdG8gZGV0YWlscyB0YWIgYWZ0ZXIgcmVtb3ZlIHB1Ymxpc2hpbmcgdGFiIHdoZW4gbW92ZSBmcm9tIG9yaWdpbmFsIHZlcnNpb24gdG8gb25lIG9mIGl0cyBwdWJsaXNoZWQgdmVyc2lvblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIiwiPG1hdC10YWItZ3JvdXAgI2R5bmFtaWNUYWJzIGNsYXNzPVwiaC1mdWxsXCIgKm5nSWY9XCJ0YWJzLmxlbmd0aCA+IDBcIj5cclxuICAgIDxtYXQtdGFiICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPiBcclxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbCBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImV4YW1wbGUtdGFiLWljb25cIj57e3RhYi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyd0YWJzLicgKyB0YWIubGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPiBcclxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWIudGVtcGxhdGVcIj48L25nLWNvbnRlbnQ+ICAgXHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbWF0LXRhYj5cclxuPC9tYXQtdGFiLWdyb3VwPiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DynamicTabsComponent } from './dynamic-tabs/dynamic-tabs.component';
4
+ import { TranslateModule } from '@ngx-translate/core';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatTabsModule } from '@angular/material/tabs';
7
+ import * as i0 from "@angular/core";
8
+ export class DynamicTabsModule {
9
+ }
10
+ DynamicTabsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ DynamicTabsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicTabsModule, declarations: [DynamicTabsComponent], imports: [CommonModule,
12
+ TranslateModule,
13
+ MatIconModule,
14
+ MatTabsModule], exports: [DynamicTabsComponent] });
15
+ DynamicTabsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicTabsModule, imports: [[
16
+ CommonModule,
17
+ TranslateModule,
18
+ MatIconModule,
19
+ MatTabsModule
20
+ ]] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicTabsModule, decorators: [{
22
+ type: NgModule,
23
+ args: [{
24
+ declarations: [DynamicTabsComponent],
25
+ imports: [
26
+ CommonModule,
27
+ TranslateModule,
28
+ MatIconModule,
29
+ MatTabsModule
30
+ ],
31
+ exports: [DynamicTabsComponent]
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy10YWJzL2R5bmFtaWMtdGFicy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBY3ZELE1BQU0sT0FBTyxpQkFBaUI7OzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixpQkFUYixvQkFBb0IsYUFFakMsWUFBWTtRQUNaLGVBQWU7UUFDZixhQUFhO1FBQ2IsYUFBYSxhQUVOLG9CQUFvQjsrR0FFbEIsaUJBQWlCLFlBUm5CO1lBQ1AsWUFBWTtZQUNaLGVBQWU7WUFDZixhQUFhO1lBQ2IsYUFBYTtTQUNkOzJGQUdVLGlCQUFpQjtrQkFWN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDcEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFDLENBQUMsb0JBQW9CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRHluYW1pY1RhYnNDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtdGFicy9keW5hbWljLXRhYnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xyXG5cclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0R5bmFtaWNUYWJzQ29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0VGFic01vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czpbRHluYW1pY1RhYnNDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljVGFic01vZHVsZSB7IH1cclxuIl19
@@ -0,0 +1,132 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
+ import { DxFormComponent } from 'devextreme-angular';
4
+ import { concat, of, Subject } from 'rxjs';
5
+ import { debounceTime, distinctUntilChanged, switchMap, catchError, tap } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../../../shared-services/file-manager.service";
8
+ import * as i2 from "../../../custom-toastr/services/custom-toastr.service";
9
+ import * as i3 from "devextreme-angular";
10
+ import * as i4 from "devextreme-angular/ui/nested";
11
+ import * as i5 from "@ng-select/ng-select";
12
+ import * as i6 from "devextreme-angular/core";
13
+ import * as i7 from "@angular/forms";
14
+ import * as i8 from "@angular/common";
15
+ import * as i9 from "@ngx-translate/core";
16
+ export class AddToCollectionComponent {
17
+ constructor(fileManagerService, customToastrService) {
18
+ this.fileManagerService = fileManagerService;
19
+ this.customToastrService = customToastrService;
20
+ this.visibleChange = new EventEmitter();
21
+ this.rtlEnabled = false;
22
+ this.loading = false;
23
+ this.isSelected = true;
24
+ this.tagsInput$ = new Subject();
25
+ this.tagsLoading = false;
26
+ this._visible = false;
27
+ }
28
+ set visible(value) {
29
+ if (this._visible === value) {
30
+ return;
31
+ }
32
+ this._visible = value;
33
+ this.visibleChange.emit(this._visible);
34
+ }
35
+ get visible() {
36
+ return this._visible;
37
+ }
38
+ ngOnInit() {
39
+ }
40
+ emitSelection(event) {
41
+ if (this.isSelected) {
42
+ this.fileManagerService
43
+ .createNewCollection(event.displayLabel)
44
+ .subscribe((res) => {
45
+ this.collectionid = res.uid;
46
+ });
47
+ }
48
+ else
49
+ this.collectionid = event.id;
50
+ }
51
+ loadItems() {
52
+ let searchterm = '';
53
+ this.isSelected = false;
54
+ let mycategories = [];
55
+ this.items$ = concat(this.fileManagerService.getCollectionFromPP(searchterm).pipe(switchMap((res) => {
56
+ res.entries.map(entry => {
57
+ mycategories.push({
58
+ displayLabel: entry.title,
59
+ id: entry.uid,
60
+ path: entry.path,
61
+ icon: entry.properties['common:icon']
62
+ });
63
+ });
64
+ return of(mycategories);
65
+ })), // default items
66
+ this.tagsInput$.pipe(debounceTime(200), distinctUntilChanged(), tap(() => (this.tagsLoading = true)), switchMap((searchterm) => {
67
+ // if (searchterm && searchterm.length) {
68
+ return this.fileManagerService
69
+ .getCollectionFromPP(searchterm)
70
+ .pipe(catchError(() => of([])), // empty list on error
71
+ switchMap((searchCat) => {
72
+ let myInerCateg = [];
73
+ this.tagsLoading = false;
74
+ this.isSelected = true;
75
+ searchCat.entries.map(entry => {
76
+ myInerCateg.push({
77
+ displayLabel: entry.title,
78
+ id: entry.uid,
79
+ path: entry.path,
80
+ icon: entry.properties['common:icon']
81
+ });
82
+ });
83
+ return of(myInerCateg);
84
+ }));
85
+ // } else {
86
+ // this.tagsLoading = false;
87
+ // this.isSelected = true;
88
+ // return of();
89
+ // }
90
+ })));
91
+ }
92
+ onFormCollectionSubmit(e) {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ e.preventDefault();
95
+ this.loading = true;
96
+ this.fileManagerService
97
+ .addToCollection(this.selectedItems, this.collectionid)
98
+ .subscribe((res) => {
99
+ this.loading = false;
100
+ this.form.instance.resetValues();
101
+ this.selectedTags = null;
102
+ this.visible = false;
103
+ this.customToastrService.show('success', 'TOASTER.SUCCESS', 'TOASTER.DOCUMENT_ADDED_TO_COLLECTION');
104
+ }, (err) => {
105
+ this.loading = false;
106
+ this.customToastrService.show('error', 'TOASTER.ERROR', 'TOASTER.DOCUMENT_ADDED_TO_COLLECTION_ERROR');
107
+ });
108
+ });
109
+ }
110
+ }
111
+ AddToCollectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: AddToCollectionComponent, deps: [{ token: i1.FileManagerService }, { token: i2.CustomToastrService }], target: i0.ɵɵFactoryTarget.Component });
112
+ AddToCollectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: AddToCollectionComponent, selector: "app-add-to-collection", inputs: { visible: "visible", rtlEnabled: "rtlEnabled", selectedItems: "selectedItems" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: DxFormComponent, descendants: true }], ngImport: i0, template: "<dx-popup class=\"popUpParent\" [rtlEnabled]=\"rtlEnabled\" id=\"photo-popup\" [width]=\"500\" [height]=\"200\"\r\n (onShown)=\"loadItems()\" closeOnOutsideClick=\"true\" title=\"{{ 'FILE_MANAGER.ADD_TO_COLLECTION' | translate }}\"\r\n [(visible)]=\"visible\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <form (submit)=\"onFormCollectionSubmit($event)\">\r\n <dx-form class=\"collection-form-wrapper\" #createForm [formData]=\"formData\" [disabled]=\"loading\">\r\n <dxi-item editorType=\"dxTextBox\">\r\n <ng-select [items]=\"items$ | async\" bindLabel=\"displayLabel\" [addTag]=\"true\"\r\n addTagText=\"Add collection\" [multiple]=\"false\" [hideSelected]=\"true\" [minTermLength]=\"0\"\r\n [loading]=\"tagsLoading\" typeToSearchText=\"search\" [typeahead]=\"tagsInput$\"\r\n [(ngModel)]=\"selectedTags\" required placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\" name=\"selectedItem\" (change)=\"emitSelection($event)\">\r\n </ng-select>\r\n </dxi-item>\r\n <dxi-item itemType=\"button\">\r\n <dxo-button-options width=\"30%\" type=\"danger\" [useSubmitBehavior]=\"true\"\r\n [template]=\"'addToCollectionTemplate'\">\r\n </dxo-button-options>\r\n </dxi-item>\r\n <ng-container *dxTemplate=\"let item of 'addToCollectionTemplate'\">\r\n <span class=\"dx-button-text\">\r\n <ng-container *ngIf=\"loading; else notLoading\">\r\n <dx-load-indicator width=\"24px\" height=\"24px\" [visible]=\"true\"></dx-load-indicator>\r\n </ng-container>\r\n <ng-template #notLoading>{{\r\n \"FILE_MANAGER.ADD\" | translate\r\n }}</ng-template>\r\n </span>\r\n </ng-container>\r\n </dx-form>\r\n </form>\r\n </div>\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.DxFormComponent, selector: "dx-form", inputs: ["accessKey", "activeStateEnabled", "alignItemLabels", "alignItemLabelsInAllGroups", "colCount", "colCountByScreen", "customizeItem", "disabled", "elementAttr", "focusStateEnabled", "formData", "height", "hint", "hoverStateEnabled", "items", "labelLocation", "labelMode", "minColWidth", "optionalMark", "readOnly", "requiredMark", "requiredMessage", "rtlEnabled", "screenByWidth", "scrollingEnabled", "showColonAfterLabel", "showOptionalMark", "showRequiredMark", "showValidationSummary", "tabIndex", "validationGroup", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onEditorEnterKey", "onFieldDataChanged", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "alignItemLabelsChange", "alignItemLabelsInAllGroupsChange", "colCountChange", "colCountByScreenChange", "customizeItemChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formDataChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemsChange", "labelLocationChange", "labelModeChange", "minColWidthChange", "optionalMarkChange", "readOnlyChange", "requiredMarkChange", "requiredMessageChange", "rtlEnabledChange", "screenByWidthChange", "scrollingEnabledChange", "showColonAfterLabelChange", "showOptionalMarkChange", "showRequiredMarkChange", "showValidationSummaryChange", "tabIndexChange", "validationGroupChange", "visibleChange", "widthChange"] }, { type: i4.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "linkAttr", "url", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { type: i5.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i4.DxoButtonOptionsComponent, selector: "dxo-button-options", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"] }], directives: [{ type: i6.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i9.TranslatePipe, "async": i8.AsyncPipe } });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: AddToCollectionComponent, decorators: [{
114
+ type: Component,
115
+ args: [{
116
+ selector: 'app-add-to-collection',
117
+ templateUrl: './add-to-collection.component.html',
118
+ styleUrls: ['./add-to-collection.component.scss']
119
+ }]
120
+ }], ctorParameters: function () { return [{ type: i1.FileManagerService }, { type: i2.CustomToastrService }]; }, propDecorators: { form: [{
121
+ type: ViewChild,
122
+ args: [DxFormComponent, { static: false }]
123
+ }], visible: [{
124
+ type: Input
125
+ }], visibleChange: [{
126
+ type: Output
127
+ }], rtlEnabled: [{
128
+ type: Input
129
+ }], selectedItems: [{
130
+ type: Input
131
+ }] } });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRvLWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2FkZC10by1jb2xsZWN0aW9uL2FkZC10by1jb2xsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9hZGQtdG8tY29sbGVjdGlvbi9hZGQtdG8tY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTckcsTUFBTSxPQUFPLHdCQUF3QjtJQTRCbkMsWUFDVSxrQkFBc0MsRUFDcEMsbUJBQXdDO1FBRDFDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQWhCcEQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFJbkIsWUFBTyxHQUFHLEtBQUss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ZSxFQUNmLDRDQUE0QyxDQUM3QyxDQUFDO1lBQ0osQ0FBQyxDQUNGLENBQUM7UUFDTixDQUFDO0tBQUE7O3FIQTVIVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwwT0FDeEIsZUFBZSxnRENiNUIsbW9FQWlDVzsyRkRyQkUsd0JBQXdCO2tCQUxwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFdBQVcsRUFBRSxvQ0FBb0M7b0JBQ2pELFNBQVMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDO2lCQUNsRDsySUFFZ0QsSUFBSTtzQkFBbEQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUV6QyxPQUFPO3NCQURWLEtBQUs7Z0JBWU4sYUFBYTtzQkFEWixNQUFNO2dCQUdQLFVBQVU7c0JBRFQsS0FBSztnQkFHTixhQUFhO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeEZvcm1Db21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBjb25jYXQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCwgY2F0Y2hFcnJvciwgdGFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEN1c3RvbVRvYXN0clNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jdXN0b20tdG9hc3RyL3NlcnZpY2VzL2N1c3RvbS10b2FzdHIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtdG8tY29sbGVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC10by1jb2xsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGQtdG8tY29sbGVjdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRUb0NvbGxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoRHhGb3JtQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgZm9ybTogRHhGb3JtQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZpc2libGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX3Zpc2libGUgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3Zpc2libGUgPSB2YWx1ZTtcclxuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMuX3Zpc2libGUpO1xyXG4gIH1cclxuICBnZXQgdmlzaWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuICBAT3V0cHV0KClcclxuICB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KClcclxuICBydGxFbmFibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBzZWxlY3RlZEl0ZW1zOiBhbnk7XHJcblxyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBpc1NlbGVjdGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBjb2xsZWN0aW9uaWQ6IGFueTtcclxuICBzZWxlY3RlZFRhZ3M6IGFueTtcclxuICBpdGVtcyQ6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIHRhZ3NJbnB1dCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgdGFnc0xvYWRpbmcgPSBmYWxzZTtcclxuICBfdmlzaWJsZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWxlTWFuYWdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjdXN0b21Ub2FzdHJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgZW1pdFNlbGVjdGlvbihldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZVxyXG4gICAgICAgIC5jcmVhdGVOZXdDb2xsZWN0aW9uKGV2ZW50LmRpc3BsYXlMYWJlbClcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sbGVjdGlvbmlkID0gcmVzLnVpZDtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB0aGlzLmNvbGxlY3Rpb25pZCA9IGV2ZW50LmlkO1xyXG4gIH1cclxuXHJcbiAgbG9hZEl0ZW1zKCkge1xyXG4gICAgbGV0IHNlYXJjaHRlcm0gPSAnJztcclxuICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgbGV0IG15Y2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgdGhpcy5pdGVtcyQgPSBjb25jYXQoXHJcbiAgICAgIHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLmdldENvbGxlY3Rpb25Gcm9tUFAoc2VhcmNodGVybSkucGlwZShzd2l0Y2hNYXAoKHJlczphbnkpPT4ge1xyXG4gICAgICAgIHJlcy5lbnRyaWVzLm1hcChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICBteWNhdGVnb3JpZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUxhYmVsIDogZW50cnkudGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQgOiBlbnRyeS51aWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZW50cnkucGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBpY29uIDplbnRyeS5wcm9wZXJ0aWVzWydjb21tb246aWNvbiddXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIG9mKG15Y2F0ZWdvcmllcyk7XHJcbiAgICB9KSkgLCAvLyBkZWZhdWx0IGl0ZW1zXHJcbiAgICAgIHRoaXMudGFnc0lucHV0JC5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLnRhZ3NMb2FkaW5nID0gdHJ1ZSkpLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoc2VhcmNodGVybSkgPT4ge1xyXG4gICAgICAgICAgLy8gaWYgKHNlYXJjaHRlcm0gJiYgc2VhcmNodGVybS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldENvbGxlY3Rpb25Gcm9tUFAoc2VhcmNodGVybSlcclxuICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSwgLy8gZW1wdHkgbGlzdCBvbiBlcnJvclxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzZWFyY2hDYXQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG15SW5lckNhdGVnID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGFnc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoQ2F0LmVudHJpZXMubWFwKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBteUluZXJDYXRlZy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUxhYmVsIDogZW50cnkudGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkIDogZW50cnkudWlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBlbnRyeS5wYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uIDplbnRyeS5wcm9wZXJ0aWVzWydjb21tb246aWNvbiddXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobXlJbmVyQ2F0ZWcpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgdGhpcy50YWdzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICByZXR1cm4gb2YoKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Gb3JtQ29sbGVjdGlvblN1Ym1pdChlKSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5maWxlTWFuYWdlclNlcnZpY2VcclxuICAgICAgLmFkZFRvQ29sbGVjdGlvbih0aGlzLnNlbGVjdGVkSXRlbXMsIHRoaXMuY29sbGVjdGlvbmlkKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmluc3RhbmNlLnJlc2V0VmFsdWVzKCk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFncyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tVG9hc3RyU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgICAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICdUT0FTVEVSLlNVQ0NFU1MnLFxyXG4gICAgICAgICAgICAnVE9BU1RFUi5ET0NVTUVOVF9BRERFRF9UT19DT0xMRUNUSU9OJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21Ub2FzdHJTZXJ2aWNlLnNob3coXHJcbiAgICAgICAgICAgICdlcnJvcicsXHJcbiAgICAgICAgICAgICdUT0FTVEVSLkVSUk9SJyxcclxuICAgICAgICAgICAgJ1RPQVNURVIuRE9DVU1FTlRfQURERURfVE9fQ09MTEVDVElPTl9FUlJPUidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGR4LXBvcHVwIGNsYXNzPVwicG9wVXBQYXJlbnRcIiBbcnRsRW5hYmxlZF09XCJydGxFbmFibGVkXCIgaWQ9XCJwaG90by1wb3B1cFwiIFt3aWR0aF09XCI1MDBcIiBbaGVpZ2h0XT1cIjIwMFwiXHJcbiAgICAob25TaG93bik9XCJsb2FkSXRlbXMoKVwiIGNsb3NlT25PdXRzaWRlQ2xpY2s9XCJ0cnVlXCIgdGl0bGU9XCJ7eyAnRklMRV9NQU5BR0VSLkFERF9UT19DT0xMRUNUSU9OJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICBbKHZpc2libGUpXT1cInZpc2libGVcIj5cclxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIj5cclxuICAgICAgICA8Zm9ybSAoc3VibWl0KT1cIm9uRm9ybUNvbGxlY3Rpb25TdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8ZHgtZm9ybSBjbGFzcz1cImNvbGxlY3Rpb24tZm9ybS13cmFwcGVyXCIgI2NyZWF0ZUZvcm0gW2Zvcm1EYXRhXT1cImZvcm1EYXRhXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxkeGktaXRlbSBlZGl0b3JUeXBlPVwiZHhUZXh0Qm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIiBiaW5kTGFiZWw9XCJkaXNwbGF5TGFiZWxcIiBbYWRkVGFnXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRUYWdUZXh0PVwiQWRkIGNvbGxlY3Rpb25cIiBbbXVsdGlwbGVdPVwiZmFsc2VcIiBbaGlkZVNlbGVjdGVkXT1cInRydWVcIiBbbWluVGVybUxlbmd0aF09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwidGFnc0xvYWRpbmdcIiB0eXBlVG9TZWFyY2hUZXh0PVwic2VhcmNoXCIgW3R5cGVhaGVhZF09XCJ0YWdzSW5wdXQkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRhZ3NcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH19XCIgbmFtZT1cInNlbGVjdGVkSXRlbVwiIChjaGFuZ2UpPVwiZW1pdFNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2R4aS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPGR4aS1pdGVtIGl0ZW1UeXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1idXR0b24tb3B0aW9ucyB3aWR0aD1cIjMwJVwiIHR5cGU9XCJkYW5nZXJcIiBbdXNlU3VibWl0QmVoYXZpb3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCInYWRkVG9Db2xsZWN0aW9uVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9keG8tYnV0dG9uLW9wdGlvbnM+XHJcbiAgICAgICAgICAgICAgICA8L2R4aS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZHhUZW1wbGF0ZT1cImxldCBpdGVtIG9mICdhZGRUb0NvbGxlY3Rpb25UZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR4LWJ1dHRvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIG5vdExvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1sb2FkLWluZGljYXRvciB3aWR0aD1cIjI0cHhcIiBoZWlnaHQ9XCIyNHB4XCIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHgtbG9hZC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdExvYWRpbmc+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRklMRV9NQU5BR0VSLkFERFwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZHgtZm9ybT5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuPC9keC1wb3B1cD4iXX0=