@eo-sdk/client 11.14.21 → 11.14.23

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 (22) hide show
  1. package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts +2 -1
  2. package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts.map +1 -1
  3. package/app/eo-framework/object-details/object-links/object-links.component.d.ts +2 -0
  4. package/app/eo-framework/object-details/object-links/object-links.component.d.ts.map +1 -1
  5. package/app/eo-framework/object-form/object-form-edit/object-form-edit.component.d.ts.map +1 -1
  6. package/assets/_default/i18n/de.json +1 -0
  7. package/assets/_default/i18n/en.json +1 -0
  8. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  9. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +2 -2
  10. package/esm2022/app/eo-client/favorite-state/favorite-state.component.mjs +1 -1
  11. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +1 -1
  12. package/esm2022/app/eo-client/notifications-state/notifications-state.component.mjs +1 -1
  13. package/esm2022/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +1 -1
  14. package/esm2022/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +1 -1
  15. package/esm2022/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +6 -3
  16. package/esm2022/app/eo-framework/object-details/object-links/object-links.component.mjs +48 -3
  17. package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +2 -2
  18. package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +12 -2
  19. package/esm2022/app/eo-framework/prepare-details/prepare-details.component.mjs +1 -1
  20. package/fesm2022/eo-sdk-client.mjs +74 -16
  21. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  22. package/package.json +2 -2
@@ -220,7 +220,7 @@ let StoredQueriesStateComponent = class StoredQueriesStateComponent {
220
220
  });
221
221
  }
222
222
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: StoredQueriesStateComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.PendingChangesService }, { token: i3.TranslateService }, { token: i4.SelectionService }, { token: i3.StoredQueriesService }, { token: i5.PageTitleService }, { token: i3.UserService }, { token: i6.AppSearchService }, { token: i3.EventService }], target: i0.ɵɵFactoryTarget.Component }); }
223
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: StoredQueriesStateComponent, selector: "eo-stored-queries-state", viewQueries: [{ propertyName: "eoGrid", first: true, predicate: ["eoGrid"], descendants: true }], ngImport: i0, template: "<yvc-split-view [layoutSettingsID]=\"'stored.queries.state'\">\n <!-- list -->\n <ng-template yvcSplitArea [size]=\"25\">\n <eo-list-container #eoList [applySelection]=\"{}\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.sidebar.navigation.storedqueries</div>\n </div>\n <div class=\"eo-header-actions\">\n <eo-icon class=\"button refresh-button\" [iconSrc]=\"'assets/_default/svg/ic_refresh.svg'\"\n (click)=\"cFilter.resetFilter();cSort.reset();refreshGrid()\"\n [iconTitle]=\"('eo.list.refresh' | translate)\"></eo-icon>\n\n <eo-overlay #oFilter class=\"overlay-filter\" [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\"\n [iconTitle]=\"'eo.list.filter' | translate\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGrid, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.folder.filter.title' | translate\" [id]=\"'stored.queries.text'\"\n [matchFields]=\"['name']\" [filterParams]=\"textFilterParams\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [id]=\"'stored.queries.type'\"\n [title]=\"'eo.folder.filter.section.objecttype' | translate\"\n [options]=\"typeFilterFields\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n <eo-overlay #oSort class=\"overlay-sort\" [iconSrc]=\"'assets/_default/svg/ic_sort.svg'\"\n [iconTitle]=\"'eo.list.sort' | translate\">\n <eo-custom-sort #cSort [id]=\"'stored.queries.sort'\" (change)=\"cSort.updateGrid(eoList.eoGrid, $event)\"\n (active)=\"oSort.onActiveChanged($event)\" [sortFields]=\"sortFields\"></eo-custom-sort>\n </eo-overlay>\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid [gridOptions]=\"gridOptions\" *ngIf=\"gridOptions?.rowData\" [fullWidth]=\"true\" [showHeader]=\"true\"\n [showFooter]=\"true\" [selectFirst]=\"selectFirst\" (eoGridCountChanged)=\"eoList.onCountChanged($event)\"\n (eoGridSelectionChanged)=\"eoList.onSelectionChanged($event)\"\n (eoGridFocusChanged)=\"eoList.onFocusChanged($event)\">\n\n <div class=\"header\">\n </div>\n\n <div class=\"footer\">\n <eo-total-count [gridCount]=\"eoList.gridCount\" [outsideGrid]=\"false\" class=\"flex-row\"></eo-total-count>\n </div>\n\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_search.svg', text: oFilter.active ? 'eo.no.filter.result' : 'eo.stored.queries.list.empty'}\"></eo-error-message>\n <eo-reset-filter [isFilterActive]=\"oFilter.active\"\n (click)=\"cFilter.resetFilter();cSort.reset();refreshGrid()\"></eo-reset-filter>\n </div>\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <!-- details -->\n <ng-template yvcSplitArea [size]=\"75\">\n <eo-stored-query-details (notifyList)=\"notifyList($event)\"></eo-stored-query-details>\n </ng-template>\n</yvc-split-view>", styles: [":host{position:absolute;left:var(--app-pane-padding);right:var(--app-pane-padding);top:var(--app-pane-padding);bottom:var(--app-pane-padding);overflow:hidden}:host yvc-split-view{height:100%}:host ::ng-deep eo-grid .ag-cell .list-item{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;align-items:center;height:80px}:host ::ng-deep eo-grid .ag-cell .list-item[unselectable]{-webkit-user-select:none;user-select:none}:host ::ng-deep eo-grid .ag-cell .list-item .content{flex:1;padding:var(--app-pane-padding);display:inline-block;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep eo-grid .ag-cell .list-item .content .title{font-weight:var(--font-weight-medium);font-size:var(--font-body)}:host ::ng-deep eo-grid .ag-cell .list-item .content .description{font-size:var(--font-caption)}:host ::ng-deep eo-grid .ag-cell .list-item .content .date{color:rgba(var(--color-black-rgb),.4)}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons{font-size:15px}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons img{width:16px;height:16px;padding:3px}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons .object-type-label{display:none}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons.shared-with-me>span{border-radius:2px;-webkit-border-radius:2px;background-color:var(--text-color-hint)}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i10.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "active", "iconTitle", "userAvatar"], outputs: ["onToggle"] }, { kind: "component", type: i11.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i12.StoredQueryDetailsComponent, selector: "eo-stored-query-details", inputs: ["query"], outputs: ["notifyList"] }, { kind: "component", type: i13.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i14.TotalCountComponent, selector: "eo-total-count", inputs: ["eoGrid", "outsideGrid", "gridCount"] }, { kind: "component", type: i15.CustomSortComponent, selector: "eo-custom-sort", inputs: ["eoGrid", "overlay", "id", "sortFields"], outputs: ["change", "active"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive", "filterForm"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.ResetFilterComponent, selector: "eo-reset-filter", inputs: ["isFilterActive"] }, { kind: "component", type: i20.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "component", type: i21.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i21.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
223
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: StoredQueriesStateComponent, selector: "eo-stored-queries-state", viewQueries: [{ propertyName: "eoGrid", first: true, predicate: ["eoGrid"], descendants: true }], ngImport: i0, template: "<yvc-split-view [layoutSettingsID]=\"'stored.queries.state'\">\n <!-- list -->\n <ng-template yvcSplitArea [size]=\"25\">\n <eo-list-container #eoList [applySelection]=\"{}\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.sidebar.navigation.storedqueries</div>\n </div>\n <div class=\"eo-header-actions\">\n <eo-icon class=\"button refresh-button\" [iconSrc]=\"'assets/_default/svg/ic_refresh.svg'\"\n (click)=\"cFilter.resetFilter();cSort.reset();refreshGrid()\"\n [iconTitle]=\"('eo.list.refresh' | translate)\"></eo-icon>\n\n <eo-overlay #oFilter class=\"overlay-filter\" [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\"\n [iconTitle]=\"'eo.list.filter' | translate\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGrid, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.folder.filter.title' | translate\" [id]=\"'stored.queries.text'\"\n [matchFields]=\"['name']\" [filterParams]=\"textFilterParams\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [id]=\"'stored.queries.type'\"\n [title]=\"'eo.folder.filter.section.objecttype' | translate\"\n [options]=\"typeFilterFields\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n <eo-overlay #oSort class=\"overlay-sort\" [iconSrc]=\"'assets/_default/svg/ic_sort.svg'\"\n [iconTitle]=\"'eo.list.sort' | translate\">\n <eo-custom-sort #cSort [id]=\"'stored.queries.sort'\" (change)=\"cSort.updateGrid(eoList.eoGrid, $event)\"\n (active)=\"oSort.onActiveChanged($event)\" [sortFields]=\"sortFields\"></eo-custom-sort>\n </eo-overlay>\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid [gridOptions]=\"gridOptions\" *ngIf=\"gridOptions?.rowData\" [fullWidth]=\"true\" [showHeader]=\"true\"\n [showFooter]=\"true\" [selectFirst]=\"selectFirst\" (eoGridCountChanged)=\"eoList.onCountChanged($event)\"\n (eoGridSelectionChanged)=\"eoList.onSelectionChanged($event)\"\n (eoGridFocusChanged)=\"eoList.onFocusChanged($event)\">\n\n <div class=\"header\">\n </div>\n\n <div class=\"footer\">\n <eo-total-count [gridCount]=\"eoList.gridCount\" [outsideGrid]=\"false\" class=\"flex-row\"></eo-total-count>\n </div>\n\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_search.svg', text: oFilter.active ? 'eo.no.filter.result' : 'eo.stored.queries.list.empty'}\"></eo-error-message>\n <eo-reset-filter [isFilterActive]=\"oFilter.active\"\n (click)=\"cFilter.resetFilter();cSort.reset();refreshGrid()\"></eo-reset-filter>\n </div>\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <!-- details -->\n <ng-template yvcSplitArea [size]=\"75\">\n <eo-stored-query-details (notifyList)=\"notifyList($event)\"></eo-stored-query-details>\n </ng-template>\n</yvc-split-view>", styles: [":host{position:absolute;left:var(--app-pane-padding);right:var(--app-pane-padding);top:var(--app-pane-padding);bottom:var(--app-pane-padding);overflow:hidden}:host yvc-split-view{height:100%}:host ::ng-deep eo-grid .ag-cell .list-item{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;align-items:center;height:80px}:host ::ng-deep eo-grid .ag-cell .list-item[unselectable]{-webkit-user-select:none;user-select:none}:host ::ng-deep eo-grid .ag-cell .list-item .content{flex:1;padding:var(--app-pane-padding);display:inline-block;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep eo-grid .ag-cell .list-item .content .title{font-weight:var(--font-weight-medium);font-size:var(--font-body)}:host ::ng-deep eo-grid .ag-cell .list-item .content .description{font-size:var(--font-caption)}:host ::ng-deep eo-grid .ag-cell .list-item .content .date{color:rgba(var(--color-black-rgb),.4)}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons{font-size:15px}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons img{width:16px;height:16px;padding:3px}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons .object-type-label{display:none}:host ::ng-deep eo-grid .ag-cell .list-item .content .icons.shared-with-me>span{border-radius:2px;-webkit-border-radius:2px;background-color:var(--text-color-hint)}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i10.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "active", "iconTitle", "userAvatar"], outputs: ["onToggle"] }, { kind: "component", type: i11.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i12.StoredQueryDetailsComponent, selector: "eo-stored-query-details", inputs: ["query"], outputs: ["notifyList"] }, { kind: "component", type: i13.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i14.TotalCountComponent, selector: "eo-total-count", inputs: ["eoGrid", "outsideGrid", "gridCount"] }, { kind: "component", type: i15.CustomSortComponent, selector: "eo-custom-sort", inputs: ["eoGrid", "overlay", "id", "sortFields"], outputs: ["change", "active"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive", "filterForm"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "id", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.ResetFilterComponent, selector: "eo-reset-filter", inputs: ["isFilterActive"] }, { kind: "component", type: i20.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "component", type: i21.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i21.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
224
224
  };
225
225
  StoredQueriesStateComponent = __decorate([
226
226
  UntilDestroy()
@@ -24,11 +24,12 @@ export class TextFilterComponent extends AbstractFilterComponent {
24
24
  this.storageService = storageService;
25
25
  this.userService = userService;
26
26
  this.title = '';
27
+ this.id = '';
27
28
  this.placeholder = 'eo.filter.input.placeholder';
28
29
  this.enableSave = false;
29
30
  this.focused = false;
30
31
  this.savedFilters = [];
31
- this.id = '#text';
32
+ this.id += '#text';
32
33
  this.getSavedFilters();
33
34
  }
34
35
  onChange(newValue, oldValue) {
@@ -79,13 +80,15 @@ export class TextFilterComponent extends AbstractFilterComponent {
79
80
  }
80
81
  }
81
82
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextFilterComponent, deps: [{ token: i1.ListSettingsService }, { token: i2.LocalStorageService }, { token: i2.UserService }], target: i0.ɵɵFactoryTarget.Component }); }
82
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: TextFilterComponent, selector: "eo-text-filter", inputs: { title: "title", placeholder: "placeholder", enableSave: "enableSave", filterParams: "filterParams", matchFields: "matchFields" }, usesInheritance: true, ngImport: i0, template: "<header class=\"filter__header\">\n <h3 class=\"filter__title title\" *ngIf=\"title\">{{title}}</h3>\n</header>\n<div class=\"flex-row\">\n <eo-form-input>\n <input (ngModelChange)=\"onChange($event)\" [ngModel]=\"value\" class=\"form-control\"\n placeholder=\"{{ placeholder | translate}}\" (focus)=\"focus()\" (focusout)=\"focusout()\">\n </eo-form-input>\n <eo-icon class=\"save-filter-icon\" [tabindex]=\"(!value || savedFilters.includes(value)) ? '-1' : '0'\" *ngIf=\"enableSave\" [ngClass]=\"{'disable-save-filter': !value || savedFilters.includes(value)}\"\n (click)=\"saveFilter(value)\"\n (keydown.enter)=\"saveFilter(value)\"\n [iconTitle]=\"'eo.filter.save' | translate\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\"></eo-icon>\n</div>\n<div *ngIf=\"enableSave && savedFilters && savedFilters.length !== 0\">\n <h4 class=\"filter__title saved-filters-title\" translate>eo.filter.save.title</h4>\n <div class=\"saved-filters-container\">\n <div class=\"saved-filter flex-row\" *ngFor=\"let savedFilter of savedFilters\">\n <span class=\"saved-filter-text\" (click)=\"onChange(savedFilter, value)\">{{savedFilter}}</span>\n <eo-icon class=\"remove-filter-icon\" (click)=\"removeFilter(savedFilter)\"\n [iconTitle]=\"'eo.filter.delete' | translate\"\n [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"></eo-icon>\n </div>\n </div>\n</div>\n", styles: [".title{margin-top:.5em;font-weight:700}input{border:none}.form-control::-ms-clear{display:none}.save-filter-icon{cursor:pointer}.save-filter-icon:focus,.save-filter-icon:hover{color:var(--color-accent)!important}.save-filter-icon.disable-save-filter{cursor:default;color:var(--color-primary-3)}.remove-filter-icon{cursor:pointer;margin-left:auto}.saved-filter-text{cursor:pointer;margin-left:5px}.saved-filter{text-decoration:underline}.saved-filters-title{margin-top:1em}.saved-filters-container{max-height:200px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", 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]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: TextFilterComponent, selector: "eo-text-filter", inputs: { title: "title", id: "id", placeholder: "placeholder", enableSave: "enableSave", filterParams: "filterParams", matchFields: "matchFields" }, usesInheritance: true, ngImport: i0, template: "<header class=\"filter__header\">\n <h3 class=\"filter__title title\" *ngIf=\"title\">{{title}}</h3>\n</header>\n<div class=\"flex-row\">\n <eo-form-input>\n <input (ngModelChange)=\"onChange($event)\" [ngModel]=\"value\" class=\"form-control\"\n placeholder=\"{{ placeholder | translate}}\" (focus)=\"focus()\" (focusout)=\"focusout()\">\n </eo-form-input>\n <eo-icon class=\"save-filter-icon\" [tabindex]=\"(!value || savedFilters.includes(value)) ? '-1' : '0'\" *ngIf=\"enableSave\" [ngClass]=\"{'disable-save-filter': !value || savedFilters.includes(value)}\"\n (click)=\"saveFilter(value)\"\n (keydown.enter)=\"saveFilter(value)\"\n [iconTitle]=\"'eo.filter.save' | translate\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\"></eo-icon>\n</div>\n<div *ngIf=\"enableSave && savedFilters && savedFilters.length !== 0\">\n <h4 class=\"filter__title saved-filters-title\" translate>eo.filter.save.title</h4>\n <div class=\"saved-filters-container\">\n <div class=\"saved-filter flex-row\" *ngFor=\"let savedFilter of savedFilters\">\n <span class=\"saved-filter-text\" (click)=\"onChange(savedFilter, value)\">{{savedFilter}}</span>\n <eo-icon class=\"remove-filter-icon\" (click)=\"removeFilter(savedFilter)\"\n [iconTitle]=\"'eo.filter.delete' | translate\"\n [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"></eo-icon>\n </div>\n </div>\n</div>\n", styles: [".title{margin-top:.5em;font-weight:700}input{border:none}.form-control::-ms-clear{display:none}.save-filter-icon{cursor:pointer}.save-filter-icon:focus,.save-filter-icon:hover{color:var(--color-accent)!important}.save-filter-icon.disable-save-filter{cursor:default;color:var(--color-primary-3)}.remove-filter-icon{cursor:pointer;margin-left:auto}.saved-filter-text{cursor:pointer;margin-left:5px}.saved-filter{text-decoration:underline}.saved-filters-title{margin-top:1em}.saved-filters-container{max-height:200px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", 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]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
83
84
  }
84
85
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextFilterComponent, decorators: [{
85
86
  type: Component,
86
87
  args: [{ selector: 'eo-text-filter', template: "<header class=\"filter__header\">\n <h3 class=\"filter__title title\" *ngIf=\"title\">{{title}}</h3>\n</header>\n<div class=\"flex-row\">\n <eo-form-input>\n <input (ngModelChange)=\"onChange($event)\" [ngModel]=\"value\" class=\"form-control\"\n placeholder=\"{{ placeholder | translate}}\" (focus)=\"focus()\" (focusout)=\"focusout()\">\n </eo-form-input>\n <eo-icon class=\"save-filter-icon\" [tabindex]=\"(!value || savedFilters.includes(value)) ? '-1' : '0'\" *ngIf=\"enableSave\" [ngClass]=\"{'disable-save-filter': !value || savedFilters.includes(value)}\"\n (click)=\"saveFilter(value)\"\n (keydown.enter)=\"saveFilter(value)\"\n [iconTitle]=\"'eo.filter.save' | translate\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\"></eo-icon>\n</div>\n<div *ngIf=\"enableSave && savedFilters && savedFilters.length !== 0\">\n <h4 class=\"filter__title saved-filters-title\" translate>eo.filter.save.title</h4>\n <div class=\"saved-filters-container\">\n <div class=\"saved-filter flex-row\" *ngFor=\"let savedFilter of savedFilters\">\n <span class=\"saved-filter-text\" (click)=\"onChange(savedFilter, value)\">{{savedFilter}}</span>\n <eo-icon class=\"remove-filter-icon\" (click)=\"removeFilter(savedFilter)\"\n [iconTitle]=\"'eo.filter.delete' | translate\"\n [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"></eo-icon>\n </div>\n </div>\n</div>\n", styles: [".title{margin-top:.5em;font-weight:700}input{border:none}.form-control::-ms-clear{display:none}.save-filter-icon{cursor:pointer}.save-filter-icon:focus,.save-filter-icon:hover{color:var(--color-accent)!important}.save-filter-icon.disable-save-filter{cursor:default;color:var(--color-primary-3)}.remove-filter-icon{cursor:pointer;margin-left:auto}.saved-filter-text{cursor:pointer;margin-left:5px}.saved-filter{text-decoration:underline}.saved-filters-title{margin-top:1em}.saved-filters-container{max-height:200px;overflow:auto}\n"] }]
87
88
  }], ctorParameters: () => [{ type: i1.ListSettingsService }, { type: i2.LocalStorageService }, { type: i2.UserService }], propDecorators: { title: [{
88
89
  type: Input
90
+ }], id: [{
91
+ type: Input
89
92
  }], placeholder: [{
90
93
  type: Input
91
94
  }], enableSave: [{
@@ -95,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
95
98
  }], matchFields: [{
96
99
  type: Input
97
100
  }] } });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvZ3JpZC9leHRlbnNpb25zL2ZpbHRlci90ZXh0L3RleHQtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL2dyaWQvZXh0ZW5zaW9ucy9maWx0ZXIvdGV4dC90ZXh0LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQW1DLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBT3JFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSx1QkFBdUI7SUFROUQsSUFBYSxZQUFZLENBQUMsTUFBcUI7UUFDN0MsS0FBSyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQ0ksV0FBVyxDQUFDLE1BQWdCO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxPQUFpQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUs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bmltcG9ydCB7SUZpbHRlclBhcmFtcywgSVJvd05vZGUsIFJvd05vZGV9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7TGlzdFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7QWJzdHJhY3RGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2Fic3RyYWN0LWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBVc2VyU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLXRleHQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUZXh0RmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWx0ZXJDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ2VvLmZpbHRlci5pbnB1dC5wbGFjZWhvbGRlcic7XG4gIEBJbnB1dCgpIGVuYWJsZVNhdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBmb2N1c2VkID0gZmFsc2U7XG4gIHNhdmVkRmlsdGVycyA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXJQYXJhbXMocGFyYW1zOiBJRmlsdGVyUGFyYW1zKSB7XG4gICAgc3VwZXIuZmlsdGVyUGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG1hdGNoRmllbGRzKGZpZWxkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnZhbHVlR2V0dGVyID0gKHJvd05vZGU6IElSb3dOb2RlKSA9PiBmaWVsZHMubWFwKGYgPT4gVXRpbHMuZ2V0UHJvcGVydHkocm93Tm9kZS5kYXRhLCBmKSkuam9pbignXFxuJyk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR1cFNldHRpbmdzKHRoaXMuaWQsIFt7aWQ6ICd0ZXh0JywgdmFsdWU6IHRoaXMudmFsdWV9XSlbMF0udmFsdWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9uQ2hhbmdlKHZhbHVlKSwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNldHRpbmdzU2VydmljZTogTGlzdFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaWQgPSAnI3RleHQnO1xuICAgIHRoaXMuZ2V0U2F2ZWRGaWx0ZXJzKCk7XG4gIH1cblxuICBvbkNoYW5nZShuZXdWYWx1ZSwgb2xkVmFsdWU/KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNhdmVTZXR0aW5ncyh0aGlzLmlkLCB0aGlzLnZhbHVlID8geyd0ZXh0JzogdGhpcy52YWx1ZX0gOiAnJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBkb2VzRXh0ZXJuYWxGaWx0ZXJQYXNzKHJvd05vZGU6IElSb3dOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsdGVyVGVybXMgPSB0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcbiAgICBjb25zdCByb3dWYWx1ZSA9IHRoaXMudmFsdWVHZXR0ZXIocm93Tm9kZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGV2ZXJ5VGVybUZvdW5kID0gIWZpbHRlclRlcm1zLmZpbmQodGVybSA9PiByb3dWYWx1ZS5pbmRleE9mKHRlcm0pID09PSAtMSk7XG4gICAgcmV0dXJuIGV2ZXJ5VGVybUZvdW5kO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgc3VwZXIucmVzZXQoKTtcbiAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zYXZlU2V0dGluZ3ModGhpcy5pZCk7XG4gIH1cblxuICBmb2N1c291dCAoKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBnZXRTYXZlZEZpbHRlcnMoKSB7XG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VyU2V0dGluZ3Muc2F2ZWRJbmJveEZpbHRlcikge1xuICAgICAgdGhpcy5zYXZlZEZpbHRlcnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlclNldHRpbmdzLnNhdmVkSW5ib3hGaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2F2ZWRGaWx0ZXJzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdlby5pbmJveC5maWx0ZXIuc3VnZ2VzdGlvbnMnKSA/IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnZW8uaW5ib3guZmlsdGVyLnN1Z2dlc3Rpb25zJykgOiBbXTtcbiAgICB9XG4gIH1cblxuICBzYXZlRmlsdGVyKHRlcm06IHN0cmluZykge1xuICAgIGlmICh0ZXJtICYmICF0aGlzLnNhdmVkRmlsdGVycy5pbmNsdWRlcyh0ZXJtKSkge1xuICAgICAgdGhpcy5zYXZlZEZpbHRlcnMucHVzaCh0ZXJtKTtcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlU2F2ZWRJbmJveEZpbHRlcnModGhpcy5zYXZlZEZpbHRlcnMpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbHRlcih0ZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcih0ID0+IHQgIT09IHRlcm0pO1xuICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlU2F2ZWRJbmJveEZpbHRlcnModGhpcy5zYXZlZEZpbHRlcnMpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZm9jdXMgKCkge1xuICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuXG4gICAgICAvLyBUaW1lb3V0IGZvciBjcm9zcyBicm93c2VyIGNvbXBhdGliaWxpdHkgKENocm9tZSlcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0YWxsJywgZmFsc2UsIG51bGwpOyB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJmaWx0ZXJfX2hlYWRlclwiPlxuICA8aDMgY2xhc3M9XCJmaWx0ZXJfX3RpdGxlIHRpdGxlXCIgKm5nSWY9XCJ0aXRsZVwiPnt7dGl0bGV9fTwvaDM+XG48L2hlYWRlcj5cbjxkaXYgY2xhc3M9XCJmbGV4LXJvd1wiPlxuICA8ZW8tZm9ybS1pbnB1dD5cbiAgICA8aW5wdXQgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIFtuZ01vZGVsXT1cInZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlfX1cIiAoZm9jdXMpPVwiZm9jdXMoKVwiIChmb2N1c291dCk9XCJmb2N1c291dCgpXCI+XG4gIDwvZW8tZm9ybS1pbnB1dD5cbiAgPGVvLWljb24gY2xhc3M9XCJzYXZlLWZpbHRlci1pY29uXCIgW3RhYmluZGV4XT1cIighdmFsdWUgfHwgc2F2ZWRGaWx0ZXJzLmluY2x1ZGVzKHZhbHVlKSkgPyAnLTEnIDogJzAnXCIgKm5nSWY9XCJlbmFibGVTYXZlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlLXNhdmUtZmlsdGVyJzogIXZhbHVlIHx8IHNhdmVkRmlsdGVycy5pbmNsdWRlcyh2YWx1ZSl9XCJcbiAgICAgICAgICAgKGNsaWNrKT1cInNhdmVGaWx0ZXIodmFsdWUpXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZUZpbHRlcih2YWx1ZSlcIlxuICAgICAgICAgICBbaWNvblRpdGxlXT1cIidlby5maWx0ZXIuc2F2ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hZGQuc3ZnJ1wiPjwvZW8taWNvbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImVuYWJsZVNhdmUgJiYgc2F2ZWRGaWx0ZXJzICYmIHNhdmVkRmlsdGVycy5sZW5ndGggIT09IDBcIj5cbiAgPGg0IGNsYXNzPVwiZmlsdGVyX190aXRsZSBzYXZlZC1maWx0ZXJzLXRpdGxlXCIgdHJhbnNsYXRlPmVvLmZpbHRlci5zYXZlLnRpdGxlPC9oND5cbiAgPGRpdiBjbGFzcz1cInNhdmVkLWZpbHRlcnMtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNhdmVkLWZpbHRlciBmbGV4LXJvd1wiICpuZ0Zvcj1cImxldCBzYXZlZEZpbHRlciBvZiBzYXZlZEZpbHRlcnNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2F2ZWQtZmlsdGVyLXRleHRcIiAoY2xpY2spPVwib25DaGFuZ2Uoc2F2ZWRGaWx0ZXIsIHZhbHVlKVwiPnt7c2F2ZWRGaWx0ZXJ9fTwvc3Bhbj5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwicmVtb3ZlLWZpbHRlci1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihzYXZlZEZpbHRlcilcIlxuICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCInZW8uZmlsdGVyLmRlbGV0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdHJhc2guc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvZ3JpZC9leHRlbnNpb25zL2ZpbHRlci90ZXh0L3RleHQtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL2dyaWQvZXh0ZW5zaW9ucy9maWx0ZXIvdGV4dC90ZXh0LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQW1DLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBT3JFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSx1QkFBdUI7SUFTOUQsSUFBYSxZQUFZLENBQUMsTUFBcUI7UUFDN0MsS0FBSyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQ0ksV0FBVyxDQUFDLE1BQWdCO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxPQUFpQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUs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bXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJRmlsdGVyUGFyYW1zLCBJUm93Tm9kZSwgUm93Tm9kZX0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHtMaXN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saXN0LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtBYnN0cmFjdEZpbHRlckNvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3QtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tdGV4dC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRleHRGaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpbHRlckNvbXBvbmVudCB7XG5cbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgQElucHV0KCkgaWQgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnZW8uZmlsdGVyLmlucHV0LnBsYWNlaG9sZGVyJztcbiAgQElucHV0KCkgZW5hYmxlU2F2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGZvY3VzZWQgPSBmYWxzZTtcbiAgc2F2ZWRGaWx0ZXJzID0gW107XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlclBhcmFtcyhwYXJhbXM6IElGaWx0ZXJQYXJhbXMpIHtcbiAgICBzdXBlci5maWx0ZXJQYXJhbXMgPSBwYXJhbXM7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbWF0Y2hGaWVsZHMoZmllbGRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMudmFsdWVHZXR0ZXIgPSAocm93Tm9kZTogSVJvd05vZGUpID0+IGZpZWxkcy5tYXAoZiA9PiBVdGlscy5nZXRQcm9wZXJ0eShyb3dOb2RlLmRhdGEsIGYpKS5qb2luKCdcXG4nKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlIHx8IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHVwU2V0dGluZ3ModGhpcy5pZCwgW3tpZDogJ3RleHQnLCB2YWx1ZTogdGhpcy52YWx1ZX1dKVswXS52YWx1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub25DaGFuZ2UodmFsdWUpLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBMaXN0U2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZCArPSAnI3RleHQnO1xuICAgIHRoaXMuZ2V0U2F2ZWRGaWx0ZXJzKCk7XG4gIH1cblxuICBvbkNoYW5nZShuZXdWYWx1ZSwgb2xkVmFsdWU/KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNhdmVTZXR0aW5ncyh0aGlzLmlkLCB0aGlzLnZhbHVlID8geyd0ZXh0JzogdGhpcy52YWx1ZX0gOiAnJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBkb2VzRXh0ZXJuYWxGaWx0ZXJQYXNzKHJvd05vZGU6IElSb3dOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsdGVyVGVybXMgPSB0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcbiAgICBjb25zdCByb3dWYWx1ZSA9IHRoaXMudmFsdWVHZXR0ZXIocm93Tm9kZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGV2ZXJ5VGVybUZvdW5kID0gIWZpbHRlclRlcm1zLmZpbmQodGVybSA9PiByb3dWYWx1ZS5pbmRleE9mKHRlcm0pID09PSAtMSk7XG4gICAgcmV0dXJuIGV2ZXJ5VGVybUZvdW5kO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgc3VwZXIucmVzZXQoKTtcbiAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zYXZlU2V0dGluZ3ModGhpcy5pZCk7XG4gIH1cblxuICBmb2N1c291dCAoKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBnZXRTYXZlZEZpbHRlcnMoKSB7XG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VyU2V0dGluZ3Muc2F2ZWRJbmJveEZpbHRlcikge1xuICAgICAgdGhpcy5zYXZlZEZpbHRlcnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlclNldHRpbmdzLnNhdmVkSW5ib3hGaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2F2ZWRGaWx0ZXJzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdlby5pbmJveC5maWx0ZXIuc3VnZ2VzdGlvbnMnKSA/IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnZW8uaW5ib3guZmlsdGVyLnN1Z2dlc3Rpb25zJykgOiBbXTtcbiAgICB9XG4gIH1cblxuICBzYXZlRmlsdGVyKHRlcm06IHN0cmluZykge1xuICAgIGlmICh0ZXJtICYmICF0aGlzLnNhdmVkRmlsdGVycy5pbmNsdWRlcyh0ZXJtKSkge1xuICAgICAgdGhpcy5zYXZlZEZpbHRlcnMucHVzaCh0ZXJtKTtcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlU2F2ZWRJbmJveEZpbHRlcnModGhpcy5zYXZlZEZpbHRlcnMpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbHRlcih0ZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcih0ID0+IHQgIT09IHRlcm0pO1xuICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlU2F2ZWRJbmJveEZpbHRlcnModGhpcy5zYXZlZEZpbHRlcnMpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZm9jdXMgKCkge1xuICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuXG4gICAgICAvLyBUaW1lb3V0IGZvciBjcm9zcyBicm93c2VyIGNvbXBhdGliaWxpdHkgKENocm9tZSlcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0YWxsJywgZmFsc2UsIG51bGwpOyB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJmaWx0ZXJfX2hlYWRlclwiPlxuICA8aDMgY2xhc3M9XCJmaWx0ZXJfX3RpdGxlIHRpdGxlXCIgKm5nSWY9XCJ0aXRsZVwiPnt7dGl0bGV9fTwvaDM+XG48L2hlYWRlcj5cbjxkaXYgY2xhc3M9XCJmbGV4LXJvd1wiPlxuICA8ZW8tZm9ybS1pbnB1dD5cbiAgICA8aW5wdXQgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIFtuZ01vZGVsXT1cInZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlfX1cIiAoZm9jdXMpPVwiZm9jdXMoKVwiIChmb2N1c291dCk9XCJmb2N1c291dCgpXCI+XG4gIDwvZW8tZm9ybS1pbnB1dD5cbiAgPGVvLWljb24gY2xhc3M9XCJzYXZlLWZpbHRlci1pY29uXCIgW3RhYmluZGV4XT1cIighdmFsdWUgfHwgc2F2ZWRGaWx0ZXJzLmluY2x1ZGVzKHZhbHVlKSkgPyAnLTEnIDogJzAnXCIgKm5nSWY9XCJlbmFibGVTYXZlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlLXNhdmUtZmlsdGVyJzogIXZhbHVlIHx8IHNhdmVkRmlsdGVycy5pbmNsdWRlcyh2YWx1ZSl9XCJcbiAgICAgICAgICAgKGNsaWNrKT1cInNhdmVGaWx0ZXIodmFsdWUpXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZUZpbHRlcih2YWx1ZSlcIlxuICAgICAgICAgICBbaWNvblRpdGxlXT1cIidlby5maWx0ZXIuc2F2ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hZGQuc3ZnJ1wiPjwvZW8taWNvbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImVuYWJsZVNhdmUgJiYgc2F2ZWRGaWx0ZXJzICYmIHNhdmVkRmlsdGVycy5sZW5ndGggIT09IDBcIj5cbiAgPGg0IGNsYXNzPVwiZmlsdGVyX190aXRsZSBzYXZlZC1maWx0ZXJzLXRpdGxlXCIgdHJhbnNsYXRlPmVvLmZpbHRlci5zYXZlLnRpdGxlPC9oND5cbiAgPGRpdiBjbGFzcz1cInNhdmVkLWZpbHRlcnMtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNhdmVkLWZpbHRlciBmbGV4LXJvd1wiICpuZ0Zvcj1cImxldCBzYXZlZEZpbHRlciBvZiBzYXZlZEZpbHRlcnNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2F2ZWQtZmlsdGVyLXRleHRcIiAoY2xpY2spPVwib25DaGFuZ2Uoc2F2ZWRGaWx0ZXIsIHZhbHVlKVwiPnt7c2F2ZWRGaWx0ZXJ9fTwvc3Bhbj5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwicmVtb3ZlLWZpbHRlci1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihzYXZlZEZpbHRlcilcIlxuICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCInZW8uZmlsdGVyLmRlbGV0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdHJhc2guc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -22,6 +22,7 @@ export class ObjectLinksComponent {
22
22
  this.cache = cache;
23
23
  this.systemService = systemService;
24
24
  this.inReferences = [];
25
+ this.sortedInReferences = [];
25
26
  this.outReferences = [];
26
27
  this.superQueryParams = {};
27
28
  this.showInReferences = true;
@@ -52,6 +53,12 @@ export class ObjectLinksComponent {
52
53
  forkJoin(obs)
53
54
  .subscribe((results) => {
54
55
  [this.inReferences, this.outReferences] = results;
56
+ this.outReferences.forEach(outRef => {
57
+ outRef.folder.sort((a, b) => a.title.localeCompare(b.title));
58
+ });
59
+ if (this.inReferences?.length) {
60
+ this.flattenAndSortInReferences();
61
+ }
55
62
  this.loading = false;
56
63
  }, (error) => {
57
64
  console.error({ error });
@@ -65,6 +72,44 @@ export class ObjectLinksComponent {
65
72
  this.superQueryParams = { 'query': encodeURIComponent(JSON.stringify(superQuery)), 'silent': true };
66
73
  });
67
74
  }
75
+ flattenAndSortInReferences() {
76
+ const flatList = [];
77
+ this.inReferences.forEach(entry1 => {
78
+ entry1.folder.forEach(entry2 => {
79
+ entry2.folder.forEach(entry3 => {
80
+ flatList.push({
81
+ ...entry3,
82
+ entry1Title: entry1.title,
83
+ entry1Type: entry1.type,
84
+ entry1Count: entry1.count,
85
+ entry1: entry1,
86
+ entry2Title: entry2.title,
87
+ entry2: entry2,
88
+ });
89
+ });
90
+ });
91
+ });
92
+ flatList.sort((a, b) => {
93
+ const titleA = a?.title?.toLowerCase() || '';
94
+ const titleB = b?.title?.toLowerCase() || '';
95
+ return titleA.localeCompare(titleB);
96
+ });
97
+ const grouped = new Map();
98
+ flatList.forEach(entry => {
99
+ const key = entry.entry1Title;
100
+ if (!grouped.has(key)) {
101
+ grouped.set(key, {
102
+ title: entry.entry1Title,
103
+ type: entry.entry1Type,
104
+ count: entry.entry1Count,
105
+ entry1: entry.entry1,
106
+ children: []
107
+ });
108
+ }
109
+ grouped.get(key).children.push(entry);
110
+ });
111
+ this.sortedInReferences = Array.from(grouped.values());
112
+ }
68
113
  createSuperQueryFromQueries(queries) {
69
114
  let superQuery = {
70
115
  term: '',
@@ -178,13 +223,13 @@ export class ObjectLinksComponent {
178
223
  }
179
224
  }
180
225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ObjectLinksComponent, deps: [{ token: i1.ReferenceService }, { token: i2.AppCacheService }, { token: i2.SystemService }], target: i0.ɵɵFactoryTarget.Component }); }
181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ObjectLinksComponent, selector: "eo-object-links", inputs: { dmsObject: "dmsObject" }, ngImport: i0, template: "<div class=\"eo-references\">\n <div class=\"object-not-found\" *ngIf=\"!inReferences?.length && !outReferences?.length; else refContainer\">\n <div>{{'eo.references.object.notfound' | translate}}</div>\n </div>\n\n <ng-template #refContainer>\n <div class=\"form-buttons\">\n <div class=\"gridlabels\">\n <div class=\"gridlabel\" [ngClass]=\"{'active': showInReferences}\" (click)=\"switchListVisibilityTo('in')\"\n title=\"{{'eo.references.to.label' | translate}}\">\n <span>{{'eo.references.to.label' | translate}}</span>\n </div>\n <div class=\"gridlabel\" [ngClass]=\"{'active': showOutReferences}\" (click)=\"switchListVisibilityTo('out')\"\n title=\"{{'eo.references.from.label' | translate}}\">\n <span>{{'eo.references.from.label' | translate}}</span>\n </div>\n </div>\n <a class=\"result-list-link\" [routerLink]=\"'/result'\" [queryParams]=\"superQueryParams\">\n <eo-icon class=\"icon\" [iconSrc]=\"'assets/_default/svg/ic_open_tab.svg'\" [iconTitle]=\"('eo.references.open.resultlist' | translate)\"></eo-icon>\n </a>\n </div>\n\n <div class=\"eo-references-lists\">\n\n <!-- list of inReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showInReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (inReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of inReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"getObjectType(entry1Layer.type)\"\n [itemAmount]=\"entry1Layer.count\"\n [resultListLink]=\"getSearchLink(entry1Layer)\">\n @for (entry2Layer of entry1Layer.folder; track entry2Layer) {\n @for (entry3Layer of entry2Layer.folder; track entry3Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry3Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry3Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry3Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry2Layer.title}}\n </div>\n </div>\n }\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n\n <!-- list of outReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showOutReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (outReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of outReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"entry1Layer.objectType\"\n [itemAmount]=\"entry1Layer.folder.length\"\n [resultListLink]=\"getSearchLink(entry1Layer)\">\n @for (entry2Layer of entry1Layer.folder; track entry2Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry2Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry2Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry2Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry2Layer.fieldLabel}}\n </div>\n </div>\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".eo-references{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding);height:calc(100% - var(--app-pane-padding) * 2);box-sizing:border-box;display:flex;flex-flow:column}.eo-references .hidden{display:none!important}.eo-references .object-not-found{height:100%;display:flex;justify-content:center;align-items:center}.eo-references .object-not-found div{color:var(--text-color-caption)}.eo-references .form-buttons{width:100%;padding:calc(var(--app-pane-padding) / 2);height:44px;display:flex;justify-content:space-between;background:var(--color-white);box-sizing:border-box}.eo-references .form-buttons .result-list-link{text-decoration:none;color:inherit}.eo-references .form-buttons .result-list-link:hover{color:var(--color-accent)}.eo-references .form-buttons .gridlabels{display:flex;width:60%}.eo-references .form-buttons .gridlabel{border:1px solid var(--list-item-border-color);border-radius:4px;padding:0 calc(var(--app-pane-padding) / 2);display:flex;align-items:center;color:var(--text-color-caption);cursor:pointer;margin-right:calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;overflow:hidden}.eo-references .form-buttons .gridlabel span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .form-buttons .gridlabel:hover{color:var(--text-color-body);border-color:#0003}.eo-references .form-buttons .active{color:var(--text-color-body);border-color:#0003;background-color:var(--panel-background-grey)}.eo-references .form-buttons a.button{display:flex;align-items:center;overflow:hidden}.eo-references .form-buttons a.button span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .eo-references-lists{flex:1;overflow:hidden;border-top:4px solid rgba(var(--color-black-rgb),.2)}.eo-references .eo-references-lists main{grid-area:main}.eo-references .eo-references-lists main.loader-overlay__mask{display:flex;width:100%;height:100%;flex-flow:column;align-items:center;justify-content:center;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .2s;animation:eoFadeIn .2s}.eo-references .eo-references-lists .resultlist-container{display:flex;flex-flow:column;height:100%;width:100%;overflow:auto}.eo-references .eo-references-lists .resultlist-container .notfound{color:var(--text-color-caption);display:flex;align-items:center;justify-content:center;height:100%}.eo-references .eo-references-lists .ag-result{position:absolute;inset:0}.eo-references .eo-references-lists .grid-wrapper{position:relative;flex:1}.referenceList{display:flex;flex-direction:column;border-radius:2px}.referenceList eo-simple-accordion{margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-right:calc(var(--app-pane-padding) / 2)}.referenceList .content{cursor:pointer;margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2)}.referenceList .content:hover{background-color:var(--main-background-light)}.referenceList .title{padding-left:calc(var(--app-pane-padding) / 2);font-weight:var(--font-weight-bold)}.referenceList .description,.referenceList .remote-element{padding-left:calc(var(--app-pane-padding) / 2)}.referenceList .title,.referenceList .description,.referenceList .icon,.referenceList .remote-element{color:var(--text-color-caption)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i5.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i6.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i7.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "styles", "headerClass", "iconObjectType", "itemAmount", "resultListLink", "selected", "item"], outputs: ["selectChange"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
226
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ObjectLinksComponent, selector: "eo-object-links", inputs: { dmsObject: "dmsObject" }, ngImport: i0, template: "<div class=\"eo-references\">\n <div class=\"object-not-found\" *ngIf=\"!inReferences?.length && !outReferences?.length; else refContainer\">\n <div>{{'eo.references.object.notfound' | translate}}</div>\n </div>\n\n <ng-template #refContainer>\n <div class=\"form-buttons\">\n <div class=\"gridlabels\">\n <div class=\"gridlabel\" [ngClass]=\"{'active': showInReferences}\" (click)=\"switchListVisibilityTo('in')\"\n title=\"{{'eo.references.to.label' | translate}}\">\n <span>{{'eo.references.to.label' | translate}}</span>\n </div>\n <div class=\"gridlabel\" [ngClass]=\"{'active': showOutReferences}\" (click)=\"switchListVisibilityTo('out')\"\n title=\"{{'eo.references.from.label' | translate}}\">\n <span>{{'eo.references.from.label' | translate}}</span>\n </div>\n </div>\n <a class=\"result-list-link\" [routerLink]=\"'/result'\" [queryParams]=\"superQueryParams\">\n <eo-icon class=\"icon\" [iconSrc]=\"'assets/_default/svg/ic_open_tab.svg'\" [iconTitle]=\"('eo.references.open.resultlist' | translate)\"></eo-icon>\n </a>\n </div>\n\n <div class=\"eo-references-lists\">\n\n <!-- list of inReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showInReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (inReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of sortedInReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"getObjectType(entry1Layer.type)\"\n [itemAmount]=\"entry1Layer.count\"\n [resultListLink]=\"getSearchLink(entry1Layer.entry1)\">\n @for (entry3Layer of entry1Layer.children; track entry3Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry3Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry3Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry3Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry3Layer.entry2Title}}\n </div>\n </div>\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n\n <!-- list of outReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showOutReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (outReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of outReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"entry1Layer.objectType\"\n [itemAmount]=\"entry1Layer.folder.length\"\n [resultListLink]=\"getSearchLink(entry1Layer)\">\n @for (entry2Layer of entry1Layer.folder; track entry2Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry2Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry2Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry2Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry2Layer.fieldLabel}}\n </div>\n </div>\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".eo-references{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding);height:calc(100% - var(--app-pane-padding) * 2);box-sizing:border-box;display:flex;flex-flow:column}.eo-references .hidden{display:none!important}.eo-references .object-not-found{height:100%;display:flex;justify-content:center;align-items:center}.eo-references .object-not-found div{color:var(--text-color-caption)}.eo-references .form-buttons{width:100%;padding:calc(var(--app-pane-padding) / 2);height:44px;display:flex;justify-content:space-between;background:var(--color-white);box-sizing:border-box}.eo-references .form-buttons .result-list-link{text-decoration:none;color:inherit}.eo-references .form-buttons .result-list-link:hover{color:var(--color-accent)}.eo-references .form-buttons .gridlabels{display:flex;width:60%}.eo-references .form-buttons .gridlabel{border:1px solid var(--list-item-border-color);border-radius:4px;padding:0 calc(var(--app-pane-padding) / 2);display:flex;align-items:center;color:var(--text-color-caption);cursor:pointer;margin-right:calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;overflow:hidden}.eo-references .form-buttons .gridlabel span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .form-buttons .gridlabel:hover{color:var(--text-color-body);border-color:#0003}.eo-references .form-buttons .active{color:var(--text-color-body);border-color:#0003;background-color:var(--panel-background-grey)}.eo-references .form-buttons a.button{display:flex;align-items:center;overflow:hidden}.eo-references .form-buttons a.button span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .eo-references-lists{flex:1;overflow:hidden;border-top:4px solid rgba(var(--color-black-rgb),.2)}.eo-references .eo-references-lists main{grid-area:main}.eo-references .eo-references-lists main.loader-overlay__mask{display:flex;width:100%;height:100%;flex-flow:column;align-items:center;justify-content:center;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .2s;animation:eoFadeIn .2s}.eo-references .eo-references-lists .resultlist-container{display:flex;flex-flow:column;height:100%;width:100%;overflow:auto}.eo-references .eo-references-lists .resultlist-container .notfound{color:var(--text-color-caption);display:flex;align-items:center;justify-content:center;height:100%}.eo-references .eo-references-lists .ag-result{position:absolute;inset:0}.eo-references .eo-references-lists .grid-wrapper{position:relative;flex:1}.referenceList{display:flex;flex-direction:column;border-radius:2px}.referenceList eo-simple-accordion{margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-right:calc(var(--app-pane-padding) / 2)}.referenceList .content{cursor:pointer;margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2)}.referenceList .content:hover{background-color:var(--main-background-light)}.referenceList .title{padding-left:calc(var(--app-pane-padding) / 2);font-weight:var(--font-weight-bold)}.referenceList .description,.referenceList .remote-element{padding-left:calc(var(--app-pane-padding) / 2)}.referenceList .title,.referenceList .description,.referenceList .icon,.referenceList .remote-element{color:var(--text-color-caption)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i5.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i6.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i7.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "styles", "headerClass", "iconObjectType", "itemAmount", "resultListLink", "selected", "item"], outputs: ["selectChange"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
182
227
  }
183
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ObjectLinksComponent, decorators: [{
184
229
  type: Component,
185
- args: [{ selector: 'eo-object-links', template: "<div class=\"eo-references\">\n <div class=\"object-not-found\" *ngIf=\"!inReferences?.length && !outReferences?.length; else refContainer\">\n <div>{{'eo.references.object.notfound' | translate}}</div>\n </div>\n\n <ng-template #refContainer>\n <div class=\"form-buttons\">\n <div class=\"gridlabels\">\n <div class=\"gridlabel\" [ngClass]=\"{'active': showInReferences}\" (click)=\"switchListVisibilityTo('in')\"\n title=\"{{'eo.references.to.label' | translate}}\">\n <span>{{'eo.references.to.label' | translate}}</span>\n </div>\n <div class=\"gridlabel\" [ngClass]=\"{'active': showOutReferences}\" (click)=\"switchListVisibilityTo('out')\"\n title=\"{{'eo.references.from.label' | translate}}\">\n <span>{{'eo.references.from.label' | translate}}</span>\n </div>\n </div>\n <a class=\"result-list-link\" [routerLink]=\"'/result'\" [queryParams]=\"superQueryParams\">\n <eo-icon class=\"icon\" [iconSrc]=\"'assets/_default/svg/ic_open_tab.svg'\" [iconTitle]=\"('eo.references.open.resultlist' | translate)\"></eo-icon>\n </a>\n </div>\n\n <div class=\"eo-references-lists\">\n\n <!-- list of inReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showInReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (inReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of inReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"getObjectType(entry1Layer.type)\"\n [itemAmount]=\"entry1Layer.count\"\n [resultListLink]=\"getSearchLink(entry1Layer)\">\n @for (entry2Layer of entry1Layer.folder; track entry2Layer) {\n @for (entry3Layer of entry2Layer.folder; track entry3Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry3Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry3Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry3Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry2Layer.title}}\n </div>\n </div>\n }\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n\n <!-- list of outReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showOutReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (outReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of outReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"entry1Layer.objectType\"\n [itemAmount]=\"entry1Layer.folder.length\"\n [resultListLink]=\"getSearchLink(entry1Layer)\">\n @for (entry2Layer of entry1Layer.folder; track entry2Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry2Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry2Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry2Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry2Layer.fieldLabel}}\n </div>\n </div>\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".eo-references{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding);height:calc(100% - var(--app-pane-padding) * 2);box-sizing:border-box;display:flex;flex-flow:column}.eo-references .hidden{display:none!important}.eo-references .object-not-found{height:100%;display:flex;justify-content:center;align-items:center}.eo-references .object-not-found div{color:var(--text-color-caption)}.eo-references .form-buttons{width:100%;padding:calc(var(--app-pane-padding) / 2);height:44px;display:flex;justify-content:space-between;background:var(--color-white);box-sizing:border-box}.eo-references .form-buttons .result-list-link{text-decoration:none;color:inherit}.eo-references .form-buttons .result-list-link:hover{color:var(--color-accent)}.eo-references .form-buttons .gridlabels{display:flex;width:60%}.eo-references .form-buttons .gridlabel{border:1px solid var(--list-item-border-color);border-radius:4px;padding:0 calc(var(--app-pane-padding) / 2);display:flex;align-items:center;color:var(--text-color-caption);cursor:pointer;margin-right:calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;overflow:hidden}.eo-references .form-buttons .gridlabel span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .form-buttons .gridlabel:hover{color:var(--text-color-body);border-color:#0003}.eo-references .form-buttons .active{color:var(--text-color-body);border-color:#0003;background-color:var(--panel-background-grey)}.eo-references .form-buttons a.button{display:flex;align-items:center;overflow:hidden}.eo-references .form-buttons a.button span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .eo-references-lists{flex:1;overflow:hidden;border-top:4px solid rgba(var(--color-black-rgb),.2)}.eo-references .eo-references-lists main{grid-area:main}.eo-references .eo-references-lists main.loader-overlay__mask{display:flex;width:100%;height:100%;flex-flow:column;align-items:center;justify-content:center;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .2s;animation:eoFadeIn .2s}.eo-references .eo-references-lists .resultlist-container{display:flex;flex-flow:column;height:100%;width:100%;overflow:auto}.eo-references .eo-references-lists .resultlist-container .notfound{color:var(--text-color-caption);display:flex;align-items:center;justify-content:center;height:100%}.eo-references .eo-references-lists .ag-result{position:absolute;inset:0}.eo-references .eo-references-lists .grid-wrapper{position:relative;flex:1}.referenceList{display:flex;flex-direction:column;border-radius:2px}.referenceList eo-simple-accordion{margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-right:calc(var(--app-pane-padding) / 2)}.referenceList .content{cursor:pointer;margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2)}.referenceList .content:hover{background-color:var(--main-background-light)}.referenceList .title{padding-left:calc(var(--app-pane-padding) / 2);font-weight:var(--font-weight-bold)}.referenceList .description,.referenceList .remote-element{padding-left:calc(var(--app-pane-padding) / 2)}.referenceList .title,.referenceList .description,.referenceList .icon,.referenceList .remote-element{color:var(--text-color-caption)}\n"] }]
230
+ args: [{ selector: 'eo-object-links', template: "<div class=\"eo-references\">\n <div class=\"object-not-found\" *ngIf=\"!inReferences?.length && !outReferences?.length; else refContainer\">\n <div>{{'eo.references.object.notfound' | translate}}</div>\n </div>\n\n <ng-template #refContainer>\n <div class=\"form-buttons\">\n <div class=\"gridlabels\">\n <div class=\"gridlabel\" [ngClass]=\"{'active': showInReferences}\" (click)=\"switchListVisibilityTo('in')\"\n title=\"{{'eo.references.to.label' | translate}}\">\n <span>{{'eo.references.to.label' | translate}}</span>\n </div>\n <div class=\"gridlabel\" [ngClass]=\"{'active': showOutReferences}\" (click)=\"switchListVisibilityTo('out')\"\n title=\"{{'eo.references.from.label' | translate}}\">\n <span>{{'eo.references.from.label' | translate}}</span>\n </div>\n </div>\n <a class=\"result-list-link\" [routerLink]=\"'/result'\" [queryParams]=\"superQueryParams\">\n <eo-icon class=\"icon\" [iconSrc]=\"'assets/_default/svg/ic_open_tab.svg'\" [iconTitle]=\"('eo.references.open.resultlist' | translate)\"></eo-icon>\n </a>\n </div>\n\n <div class=\"eo-references-lists\">\n\n <!-- list of inReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showInReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (inReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of sortedInReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"getObjectType(entry1Layer.type)\"\n [itemAmount]=\"entry1Layer.count\"\n [resultListLink]=\"getSearchLink(entry1Layer.entry1)\">\n @for (entry3Layer of entry1Layer.children; track entry3Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry3Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry3Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry3Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry3Layer.entry2Title}}\n </div>\n </div>\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n\n <!-- list of outReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showOutReferences}\">\n @if (loading) {\n <main class=\"loader-overlay__mask\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </main>\n } @else if (outReferences?.length) {\n <div class=\"referenceList\">\n @for (entry1Layer of outReferences; track entry1Layer) {\n <eo-simple-accordion\n [header]=\"entry1Layer.title\"\n [iconObjectType]=\"entry1Layer.objectType\"\n [itemAmount]=\"entry1Layer.folder.length\"\n [resultListLink]=\"getSearchLink(entry1Layer)\">\n @for (entry2Layer of entry1Layer.folder; track entry2Layer) {\n <div class=\"content\" (click)=\"navigateToReference($event, entry2Layer)\">\n <div class=\"flex-row\">\n <div class=\"title\">\n {{entry2Layer?.title}}\n </div>\n </div>\n <div class=\"description\">\n {{entry2Layer?.description}}\n </div>\n <div class=\"remote-element\">\n {{'eo.references.field.label' | translate}} {{entry2Layer.fieldLabel}}\n </div>\n </div>\n }\n </eo-simple-accordion>\n }\n </div>\n } @else {\n <div class=\"notfound\">{{'eo.references.object.notfound' | translate}}</div>\n }\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".eo-references{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding);height:calc(100% - var(--app-pane-padding) * 2);box-sizing:border-box;display:flex;flex-flow:column}.eo-references .hidden{display:none!important}.eo-references .object-not-found{height:100%;display:flex;justify-content:center;align-items:center}.eo-references .object-not-found div{color:var(--text-color-caption)}.eo-references .form-buttons{width:100%;padding:calc(var(--app-pane-padding) / 2);height:44px;display:flex;justify-content:space-between;background:var(--color-white);box-sizing:border-box}.eo-references .form-buttons .result-list-link{text-decoration:none;color:inherit}.eo-references .form-buttons .result-list-link:hover{color:var(--color-accent)}.eo-references .form-buttons .gridlabels{display:flex;width:60%}.eo-references .form-buttons .gridlabel{border:1px solid var(--list-item-border-color);border-radius:4px;padding:0 calc(var(--app-pane-padding) / 2);display:flex;align-items:center;color:var(--text-color-caption);cursor:pointer;margin-right:calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;overflow:hidden}.eo-references .form-buttons .gridlabel span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .form-buttons .gridlabel:hover{color:var(--text-color-body);border-color:#0003}.eo-references .form-buttons .active{color:var(--text-color-body);border-color:#0003;background-color:var(--panel-background-grey)}.eo-references .form-buttons a.button{display:flex;align-items:center;overflow:hidden}.eo-references .form-buttons a.button span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .eo-references-lists{flex:1;overflow:hidden;border-top:4px solid rgba(var(--color-black-rgb),.2)}.eo-references .eo-references-lists main{grid-area:main}.eo-references .eo-references-lists main.loader-overlay__mask{display:flex;width:100%;height:100%;flex-flow:column;align-items:center;justify-content:center;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .2s;animation:eoFadeIn .2s}.eo-references .eo-references-lists .resultlist-container{display:flex;flex-flow:column;height:100%;width:100%;overflow:auto}.eo-references .eo-references-lists .resultlist-container .notfound{color:var(--text-color-caption);display:flex;align-items:center;justify-content:center;height:100%}.eo-references .eo-references-lists .ag-result{position:absolute;inset:0}.eo-references .eo-references-lists .grid-wrapper{position:relative;flex:1}.referenceList{display:flex;flex-direction:column;border-radius:2px}.referenceList eo-simple-accordion{margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-right:calc(var(--app-pane-padding) / 2)}.referenceList .content{cursor:pointer;margin-top:var(--app-pane-padding);margin-left:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2)}.referenceList .content:hover{background-color:var(--main-background-light)}.referenceList .title{padding-left:calc(var(--app-pane-padding) / 2);font-weight:var(--font-weight-bold)}.referenceList .description,.referenceList .remote-element{padding-left:calc(var(--app-pane-padding) / 2)}.referenceList .title,.referenceList .description,.referenceList .icon,.referenceList .remote-element{color:var(--text-color-caption)}\n"] }]
186
231
  }], ctorParameters: () => [{ type: i1.ReferenceService }, { type: i2.AppCacheService }, { type: i2.SystemService }], propDecorators: { dmsObject: [{
187
232
  type: Input,
188
233
  args: ['dmsObject']
189
234
  }] } });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWxpbmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL29iamVjdC1kZXRhaWxzL29iamVjdC1saW5rcy9vYmplY3QtbGlua3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvb2JqZWN0LWRldGFpbHMvb2JqZWN0LWxpbmtzL29iamVjdC1saW5rcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUcvQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQVE5QixNQUFNLE9BQU8sb0JBQW9CO0lBYS9CLElBQ0ksU0FBUyxDQUFDLFNBQW9CO1FBQ2hDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBb0IsZ0JBQWtDLEVBQzVDLEtBQXNCLEVBQ3RCLGFBQTRCO1FBRmxCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDNUMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFwQnRDLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBRW5CLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUV0QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxLQUFLLENBQUM7SUFhaEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLElB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RkNYakMsd2pKQXNHQTs7MkZEM0ZhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7K0lBa0J2QixTQUFTO3NCQURaLEtBQUs7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3JlZmVyZW5jZXMvcmVmZXJlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtEbXNPYmplY3QsIEFwcENhY2hlU2VydmljZX0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7Zm9ya0pvaW59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTeXN0ZW1TZXJ2aWNlfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1vYmplY3QtbGlua3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWxpbmtzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LWxpbmtzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0TGlua3NDb21wb25lbnQge1xuXG4gIGl0ZW06IERtc09iamVjdDtcbiAgaW5SZWZlcmVuY2VzID0gW107XG4gIG91dFJlZmVyZW5jZXMgPSBbXTtcbiAgcXVlcmllcztcbiAgc3VwZXJRdWVyeVBhcmFtcyA9IHt9O1xuXG4gIHNob3dJblJlZmVyZW5jZXMgPSB0cnVlO1xuICBzaG93T3V0UmVmZXJlbmNlcyA9IGZhbHNlO1xuXG4gIGxvYWRpbmcgPSBmYWxzZTtcblxuICBASW5wdXQoJ2Rtc09iamVjdCcpXG4gIHNldCBkbXNPYmplY3QoZG1zT2JqZWN0OiBEbXNPYmplY3QpIHtcbiAgICBpZiAoZG1zT2JqZWN0KSB7XG4gICAgICB0aGlzLml0ZW0gPSBkbXNPYmplY3Q7XG4gICAgICB0aGlzLmluaXQoZG1zT2JqZWN0KTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IFJlZmVyZW5jZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQXBwQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSkge1xuICB9XG5cbiAgc3dpdGNoTGlzdFZpc2liaWxpdHlUbyhsaXN0OiAnaW4nIHwgJ291dCcpIHtcbiAgICBpZiAobGlzdCA9PT0gJ2luJykge1xuICAgICAgdGhpcy5zaG93SW5SZWZlcmVuY2VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd091dFJlZmVyZW5jZXMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93SW5SZWZlcmVuY2VzID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dPdXRSZWZlcmVuY2VzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5jYWNoZS5zZXRJdGVtKCd5dXYucmVmZXJlbmNlLmxpc3Quc2hvdy4nICsgdGhpcy5pdGVtLnR5cGVOYW1lLCBsaXN0KTtcbiAgfVxuXG4gIGdldE9iamVjdFR5cGUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KGl0ZW0pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2FjaGUuZ2V0SXRlbSgneXV2LnJlZmVyZW5jZS5saXN0LnNob3cuJyArIGl0ZW0udHlwZU5hbWUpLnN1YnNjcmliZShyZXMgPT4gdGhpcy5zd2l0Y2hMaXN0VmlzaWJpbGl0eVRvKHJlcykpO1xuICAgIGNvbnN0IG9icyA9IFtcbiAgICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5nZXRJblJlZmVyZW5jZXMoaXRlbSksXG4gICAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2UuZ2V0T3V0UmVmZXJlbmNlcyhpdGVtKVxuICAgIF07XG4gICAgZm9ya0pvaW4ob2JzKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55W11bXSkgPT4ge1xuICAgICAgICBbdGhpcy5pblJlZmVyZW5jZXMsIHRoaXMub3V0UmVmZXJlbmNlc10gPSByZXN1bHRzO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKHtlcnJvcn0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlXG4gICAgICAuZ2V0UXVlcmllcyhpdGVtKVxuICAgICAgLnN1YnNjcmliZShxdWVyaWVzID0+IHtcbiAgICAgICAgdGhpcy5xdWVyaWVzID0gcXVlcmllcztcbiAgICAgICAgY29uc3Qgc3VwZXJRdWVyeSA9IHRoaXMuY3JlYXRlU3VwZXJRdWVyeUZyb21RdWVyaWVzKHRoaXMucXVlcmllcyk7XG4gICAgICAgIHRoaXMuc3VwZXJRdWVyeVBhcmFtcyA9IHsncXVlcnknOiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc3VwZXJRdWVyeSkpLCAnc2lsZW50JzogdHJ1ZX07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3VwZXJRdWVyeUZyb21RdWVyaWVzKHF1ZXJpZXMpIHtcbiAgICBsZXQgc3VwZXJRdWVyeSA9IHtcbiAgICAgIHRlcm06ICcnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBleHBlcnRtb2RlOiB0cnVlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHF1ZXJpZXMub3V0UmVmZXJlbmNlUXVlcmllcy5mb3JFYWNoKHF1ZXJ5ID0+IHtcbiAgICAgIGlmIChxdWVyeS5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5LmZpbHRlcnMpXG4gICAgICAgICAgLmZvckVhY2goZmlsdGVyTmFtZSA9PiBzdXBlclF1ZXJ5LnRlcm0gKz0gdGhpcy5jcmVhdGVTdXBlclF1ZXJ5VGVybVBhcnQocXVlcnksIGZpbHRlck5hbWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyUXVlcnkudGVybSArPSAnKCcgKyBxdWVyeS50ZXJtICsgJyknICsgJyBPUiAnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcXVlcmllcy5pblJlZmVyZW5jZVF1ZXJpZXMuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgIGlmIChxdWVyeS5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5LmZpbHRlcnMpXG4gICAgICAgICAgLmZvckVhY2goZmlsdGVyTmFtZSA9PiBzdXBlclF1ZXJ5LnRlcm0gKz0gdGhpcy5jcmVhdGVTdXBlclF1ZXJ5VGVybVBhcnQocXVlcnksIGZpbHRlck5hbWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyUXVlcnkudGVybSArPSBxdWVyeS50ZXJtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3VwZXJRdWVyeS50ZXJtID0gc3VwZXJRdWVyeS50ZXJtLnJlcGxhY2UobmV3IFJlZ0V4cCgnLCcsICdnJyksICcgJyk7IC8vIHJlcGxhY2UgYWxsICcsJyB3aXRoICcgJ1xuICAgIHN1cGVyUXVlcnkudGVybSA9IHN1cGVyUXVlcnkudGVybS5yZXBsYWNlKG5ldyBSZWdFeHAoJyBPUiAnICsgJyQnKSwgJycpOyAvLyByZW1vdmUgbGFzdCAnIE9SICdcblxuICAgIHJldHVybiBzdXBlclF1ZXJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdXBlclF1ZXJ5VGVybVBhcnQocXVlcnksIGZpbHRlck5hbWUpIHtcbiAgICAvLyByZXNlcnZlZCBjaGFyYWN0ZXJzIG9mIGVsYXN0aWMgc2VhcmNoXG4gICAgLy8gdG9kbzogYWRkICd8fCdcbiAgICBjb25zdCByZXNlcnZlZENoYXJzID0gWydcXFxcJywgJy8nLCAnXFwrJywgJy0nLCAnPScsICcmJicsICc+JywgJzwnLCAnIScsICdcXCgnLCAnXFwpJywgJ1xceycsICdcXH0nLCAnXFxbJywgJ1xcXScsICdcXF4nLCAnXCInLCAnXFx+JywgJ1xcKicsICdcXD8nLCAnOiddO1xuXG4gICAgY29uc3QgZmlsdGVyID0gcXVlcnkuZmlsdGVyc1tmaWx0ZXJOYW1lXTtcbiAgICBsZXQgdmFsdWUgPSAnJyArIGZpbHRlci52MSArICcnO1xuICAgIHJlc2VydmVkQ2hhcnMuZm9yRWFjaChjaGFyID0+IHtcbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKGNoYXIpID4gLTEpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwnICsgY2hhciwgJ2cnKSwgJ1xcXFwnICsgY2hhcik7IC8vIGVzY2FwZXMgYWxsIHJlc2VydmVkIGNoYXJhY3RlcnNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgdHlwZXMgPSB0aGlzLmdldFN1YlR5cGVzKHF1ZXJ5LnR5cGVzWzBdKTtcbiAgICB0eXBlcy5wdXNoKHF1ZXJ5LnR5cGVzWzBdKTtcbiAgICBsZXQgaW5kZXhOYW1lID0gdGhpcy5nZXRJbmRleE5hbWVCeVFOYW1lKGZpbHRlck5hbWUpO1xuICAgIGlmICghaW5kZXhOYW1lKSB7XG4gICAgICBpbmRleE5hbWUgPSAnc3RyXycgKyBmaWx0ZXJOYW1lLnJlcGxhY2UoJy4nLCAnXycpO1xuICAgIH1cbiAgICByZXR1cm4gJygnICsgaW5kZXhOYW1lICsgJzooJyArIHZhbHVlICsgJykgQU5EIGtleV90eXBlOignICsgdHlwZXMgKyAnKSkgT1IgJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhOYW1lQnlRTmFtZShxbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlcygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0eXBlc1tpXS5lbGVtZW50cy5maW5kKGVsID0+IGVsLnFuYW1lID09PSBxbmFtZSk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5pbmRleG5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJUeXBlcyh0eXBlTmFtZSkge1xuICAgIGxldCB0eXBlcyA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlcygpO1xuICAgIGxldCBzdWJUeXBlcyA9IFtdO1xuICAgIHR5cGVzLmZvckVhY2gob2JqZWN0VHlwZSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSAhIW9iamVjdFR5cGUuc3VwZXJ0eXBlcy5maW5kKCh0OiBhbnkpID0+IHQubmFtZSA9PT0gdHlwZU5hbWUpO1xuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBzdWJUeXBlcy5wdXNoKG9iamVjdFR5cGUucW5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICApO1xuICAgIHJldHVybiBzdWJUeXBlcztcbiAgfVxuXG4gIG5hdmlnYXRlVG9SZWZlcmVuY2UoZXZlbnQsIGVudHJ5KSB7XG4gICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoL29iamVjdHxyZXN1bHR8ZmF2b3JpdGVzfGluYm94fHByb2Nlc3N8bm90aWZpY2F0aW9uc3xyZWN5Y2xlYmluLylbMF0gKyAnb2JqZWN0LycgKyBlbnRyeT8uaWQ7XG4gICAgd2luZG93Lm9wZW4odXJsLCAoZXZlbnQgJiYgZXZlbnQ/LmN0cmxLZXkpID8gJ19ibGFuaycgOiAnX3NlbGYnKTtcbiAgfVxuXG4gIGdldFNlYXJjaExpbmsoZW50cnkpIHtcbiAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgdHlwZXM6IFt0aGlzLnNob3dJblJlZmVyZW5jZXMgPyBlbnRyeS50eXBlIDogZW50cnkub2JqZWN0VHlwZT8ucW5hbWVdLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBleHBlcnRtb2RlOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHRlcm06ICcnXG4gICAgfTtcbiAgICBpZiAodGhpcy5zaG93SW5SZWZlcmVuY2VzKSB7XG4gICAgICBlbnRyeS5mb2xkZXIuZm9yRWFjaChlbnRyeTJMYXllciA9PiB7XG4gICAgICAgIHF1ZXJ5LmZpbHRlcnNbZW50cnkyTGF5ZXIucmVmZXJlbmNlZmllbGRdID0ge1xuICAgICAgICAgIG86ICdpbicsXG4gICAgICAgICAgdjE6IEFycmF5LmlzQXJyYXkoZW50cnkyTGF5ZXIucmVmZXJlbmNldmFsdWUpID8gZW50cnkyTGF5ZXIucmVmZXJlbmNldmFsdWUgOiBbZW50cnkyTGF5ZXIucmVmZXJlbmNldmFsdWVdXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGxldCBzdXBlclF1ZXJ5ID0ge1xuICAgICAgICB0ZXJtOiAnJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGV4cGVydG1vZGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5LmZpbHRlcnMpXG4gICAgICAgIC5mb3JFYWNoKGZpbHRlck5hbWUgPT4gc3VwZXJRdWVyeS50ZXJtICs9IHRoaXMuY3JlYXRlU3VwZXJRdWVyeVRlcm1QYXJ0KHF1ZXJ5LCBmaWx0ZXJOYW1lKSk7XG4gICAgICBzdXBlclF1ZXJ5LnRlcm0gPSBzdXBlclF1ZXJ5LnRlcm0ucmVwbGFjZShuZXcgUmVnRXhwKCcsJywgJ2cnKSwgJyAnKTsgLy8gcmVwbGFjZSBhbGwgJywnIHdpdGggJyAnXG4gICAgICBzdXBlclF1ZXJ5LnRlcm0gPSBzdXBlclF1ZXJ5LnRlcm0ucmVwbGFjZShuZXcgUmVnRXhwKCcgT1IgJyArICckJyksICcnKTsgLy8gcmVtb3ZlIGxhc3QgJyBPUiAnXG4gICAgICByZXR1cm4gYHJlc3VsdD9xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzdXBlclF1ZXJ5KSl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkub3B0aW9ucy5leHBlcnRtb2RlID0gdHJ1ZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cnkuZm9sZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXJ5LnRlcm0gKz0gJ19pZDonICsgZW50cnkuZm9sZGVyW2ldLmlkO1xuICAgICAgICBpZiAoaSAhPT0gZW50cnkuZm9sZGVyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBxdWVyeS50ZXJtICs9ICcgfHwgJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGByZXN1bHQ/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocXVlcnkpKX1gO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImVvLXJlZmVyZW5jZXNcIj5cbiAgPGRpdiBjbGFzcz1cIm9iamVjdC1ub3QtZm91bmRcIiAqbmdJZj1cIiFpblJlZmVyZW5jZXM/Lmxlbmd0aCAmJiAhb3V0UmVmZXJlbmNlcz8ubGVuZ3RoOyBlbHNlIHJlZkNvbnRhaW5lclwiPlxuICAgIDxkaXY+e3snZW8ucmVmZXJlbmNlcy5vYmplY3Qubm90Zm91bmQnIHwgdHJhbnNsYXRlfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlICNyZWZDb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tYnV0dG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRsYWJlbHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZGxhYmVsXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBzaG93SW5SZWZlcmVuY2VzfVwiIChjbGljayk9XCJzd2l0Y2hMaXN0VmlzaWJpbGl0eVRvKCdpbicpXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3snZW8ucmVmZXJlbmNlcy50by5sYWJlbCcgfCB0cmFuc2xhdGV9fVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eydlby5yZWZlcmVuY2VzLnRvLmxhYmVsJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkbGFiZWxcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNob3dPdXRSZWZlcmVuY2VzfVwiIChjbGljayk9XCJzd2l0Y2hMaXN0VmlzaWJpbGl0eVRvKCdvdXQnKVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7J2VvLnJlZmVyZW5jZXMuZnJvbS5sYWJlbCcgfCB0cmFuc2xhdGV9fVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eydlby5yZWZlcmVuY2VzLmZyb20ubGFiZWwnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhIGNsYXNzPVwicmVzdWx0LWxpc3QtbGlua1wiIFtyb3V0ZXJMaW5rXT1cIicvcmVzdWx0J1wiIFtxdWVyeVBhcmFtc109XCJzdXBlclF1ZXJ5UGFyYW1zXCI+XG4gICAgICAgIDxlby1pY29uIGNsYXNzPVwiaWNvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX29wZW5fdGFiLnN2ZydcIiBbaWNvblRpdGxlXT1cIignZW8ucmVmZXJlbmNlcy5vcGVuLnJlc3VsdGxpc3QnIHwgdHJhbnNsYXRlKVwiPjwvZW8taWNvbj5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlby1yZWZlcmVuY2VzLWxpc3RzXCI+XG5cbiAgICAgIDwhLS0gbGlzdCBvZiBpblJlZmVyZW5jZXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0bGlzdC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2hpZGRlbic6ICFzaG93SW5SZWZlcmVuY2VzfVwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgICA8bWFpbiBjbGFzcz1cImxvYWRlci1vdmVybGF5X19tYXNrXCI+XG4gICAgICAgICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgICAgICA8L21haW4+XG4gICAgICAgIH0gQGVsc2UgaWYgKGluUmVmZXJlbmNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlZmVyZW5jZUxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKGVudHJ5MUxheWVyIG9mIGluUmVmZXJlbmNlczsgdHJhY2sgZW50cnkxTGF5ZXIpIHtcbiAgICAgICAgICAgICAgPGVvLXNpbXBsZS1hY2NvcmRpb25cbiAgICAgICAgICAgICAgICBbaGVhZGVyXT1cImVudHJ5MUxheWVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbaWNvbk9iamVjdFR5cGVdPVwiZ2V0T2JqZWN0VHlwZShlbnRyeTFMYXllci50eXBlKVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1BbW91bnRdPVwiZW50cnkxTGF5ZXIuY291bnRcIlxuICAgICAgICAgICAgICAgIFtyZXN1bHRMaXN0TGlua109XCJnZXRTZWFyY2hMaW5rKGVudHJ5MUxheWVyKVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGVudHJ5MkxheWVyIG9mIGVudHJ5MUxheWVyLmZvbGRlcjsgdHJhY2sgZW50cnkyTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgIEBmb3IgKGVudHJ5M0xheWVyIG9mIGVudHJ5MkxheWVyLmZvbGRlcjsgdHJhY2sgZW50cnkzTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIiAoY2xpY2spPVwibmF2aWdhdGVUb1JlZmVyZW5jZSgkZXZlbnQsIGVudHJ5M0xheWVyKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZW50cnkzTGF5ZXI/LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tlbnRyeTNMYXllcj8uZGVzY3JpcHRpb259fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1vdGUtZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3snZW8ucmVmZXJlbmNlcy5maWVsZC5sYWJlbCcgfCB0cmFuc2xhdGV9fSB7e2VudHJ5MkxheWVyLnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3Rmb3VuZFwiPnt7J2VvLnJlZmVyZW5jZXMub2JqZWN0Lm5vdGZvdW5kJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIGxpc3Qgb2Ygb3V0UmVmZXJlbmNlcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRsaXN0LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnaGlkZGVuJzogIXNob3dPdXRSZWZlcmVuY2VzfVwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgICA8bWFpbiBjbGFzcz1cImxvYWRlci1vdmVybGF5X19tYXNrXCI+XG4gICAgICAgICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgICAgICA8L21haW4+XG4gICAgICAgIH0gQGVsc2UgaWYgKG91dFJlZmVyZW5jZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZlcmVuY2VMaXN0XCI+XG4gICAgICAgICAgICBAZm9yIChlbnRyeTFMYXllciBvZiBvdXRSZWZlcmVuY2VzOyB0cmFjayBlbnRyeTFMYXllcikge1xuICAgICAgICAgICAgICA8ZW8tc2ltcGxlLWFjY29yZGlvblxuICAgICAgICAgICAgICAgIFtoZWFkZXJdPVwiZW50cnkxTGF5ZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtpY29uT2JqZWN0VHlwZV09XCJlbnRyeTFMYXllci5vYmplY3RUeXBlXCJcbiAgICAgICAgICAgICAgICBbaXRlbUFtb3VudF09XCJlbnRyeTFMYXllci5mb2xkZXIubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbcmVzdWx0TGlzdExpbmtdPVwiZ2V0U2VhcmNoTGluayhlbnRyeTFMYXllcilcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChlbnRyeTJMYXllciBvZiBlbnRyeTFMYXllci5mb2xkZXI7IHRyYWNrIGVudHJ5MkxheWVyKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiIChjbGljayk9XCJuYXZpZ2F0ZVRvUmVmZXJlbmNlKCRldmVudCwgZW50cnkyTGF5ZXIpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tlbnRyeTJMYXllcj8udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3tlbnRyeTJMYXllcj8uZGVzY3JpcHRpb259fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbW90ZS1lbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3snZW8ucmVmZXJlbmNlcy5maWVsZC5sYWJlbCcgfCB0cmFuc2xhdGV9fSB7e2VudHJ5MkxheWVyLmZpZWxkTGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9lby1zaW1wbGUtYWNjb3JkaW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90Zm91bmRcIj57eydlby5yZWZlcmVuY2VzLm9iamVjdC5ub3Rmb3VuZCcgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWxpbmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL29iamVjdC1kZXRhaWxzL29iamVjdC1saW5rcy9vYmplY3QtbGlua3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvb2JqZWN0LWRldGFpbHMvb2JqZWN0LWxpbmtzL29iamVjdC1saW5rcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUcvQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQVE5QixNQUFNLE9BQU8sb0JBQW9CO0lBYy9CLElBQ0ksU0FBUyxDQUFDLFNBQW9CO1FBQ2hDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBb0IsZ0JBQWtDLEVBQzVDLEtBQXNCLEVBQ3RCLGFBQTRCO1FBRmxCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDNUMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFyQnRDLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFdEIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixZQUFPLEdBQUcsS0FBSyxDQUFDO0lB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RSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUNqRyxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUM5RixPQUFPLGdCQUFnQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNsQyxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLGdCQUFnQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQzs4R0E5T1Usb0JBQW9CO2tHQUFwQixvQkFBb0IsMkZDWGpDLDY4SUFvR0E7OzJGRHpGYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsaUJBQWlCOytJQW1CdkIsU0FBUztzQkFEWixLQUFLO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZWZlcmVuY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9yZWZlcmVuY2VzL3JlZmVyZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7RG1zT2JqZWN0LCBBcHBDYWNoZVNlcnZpY2V9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge2ZvcmtKb2lufSBmcm9tICdyeGpzJztcbmltcG9ydCB7U3lzdGVtU2VydmljZX0gZnJvbSAnQGVvLXNkay9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tb2JqZWN0LWxpbmtzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29iamVjdC1saW5rcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29iamVjdC1saW5rcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9iamVjdExpbmtzQ29tcG9uZW50IHtcblxuICBpdGVtOiBEbXNPYmplY3Q7XG4gIGluUmVmZXJlbmNlcyA9IFtdO1xuICBzb3J0ZWRJblJlZmVyZW5jZXMgPSBbXTtcbiAgb3V0UmVmZXJlbmNlcyA9IFtdO1xuICBxdWVyaWVzO1xuICBzdXBlclF1ZXJ5UGFyYW1zID0ge307XG5cbiAgc2hvd0luUmVmZXJlbmNlcyA9IHRydWU7XG4gIHNob3dPdXRSZWZlcmVuY2VzID0gZmFsc2U7XG5cbiAgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZG1zT2JqZWN0JylcbiAgc2V0IGRtc09iamVjdChkbXNPYmplY3Q6IERtc09iamVjdCkge1xuICAgIGlmIChkbXNPYmplY3QpIHtcbiAgICAgIHRoaXMuaXRlbSA9IGRtc09iamVjdDtcbiAgICAgIHRoaXMuaW5pdChkbXNPYmplY3QpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBBcHBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlKSB7XG4gIH1cblxuICBzd2l0Y2hMaXN0VmlzaWJpbGl0eVRvKGxpc3Q6ICdpbicgfCAnb3V0Jykge1xuICAgIGlmIChsaXN0ID09PSAnaW4nKSB7XG4gICAgICB0aGlzLnNob3dJblJlZmVyZW5jZXMgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93T3V0UmVmZXJlbmNlcyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dJblJlZmVyZW5jZXMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd091dFJlZmVyZW5jZXMgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlLnNldEl0ZW0oJ3l1di5yZWZlcmVuY2UubGlzdC5zaG93LicgKyB0aGlzLml0ZW0udHlwZU5hbWUsIGxpc3QpO1xuICB9XG5cbiAgZ2V0T2JqZWN0VHlwZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUobmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGluaXQoaXRlbSkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jYWNoZS5nZXRJdGVtKCd5dXYucmVmZXJlbmNlLmxpc3Quc2hvdy4nICsgaXRlbS50eXBlTmFtZSkuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLnN3aXRjaExpc3RWaXNpYmlsaXR5VG8ocmVzKSk7XG4gICAgY29uc3Qgb2JzID0gW1xuICAgICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLmdldEluUmVmZXJlbmNlcyhpdGVtKSxcbiAgICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5nZXRPdXRSZWZlcmVuY2VzKGl0ZW0pXG4gICAgXTtcbiAgICBmb3JrSm9pbihvYnMpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnlbXVtdKSA9PiB7XG4gICAgICAgIFt0aGlzLmluUmVmZXJlbmNlcywgdGhpcy5vdXRSZWZlcmVuY2VzXSA9IHJlc3VsdHM7XG4gICAgICAgIHRoaXMub3V0UmVmZXJlbmNlcy5mb3JFYWNoKG91dFJlZiA9PiB7XG4gICAgICAgICAgb3V0UmVmLmZvbGRlci5zb3J0KChhLCBiKSA9PiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pblJlZmVyZW5jZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZmxhdHRlbkFuZFNvcnRJblJlZmVyZW5jZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3Ioe2Vycm9yfSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2VcbiAgICAgIC5nZXRRdWVyaWVzKGl0ZW0pXG4gICAgICAuc3Vic2NyaWJlKHF1ZXJpZXMgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJpZXMgPSBxdWVyaWVzO1xuICAgICAgICBjb25zdCBzdXBlclF1ZXJ5ID0gdGhpcy5jcmVhdGVTdXBlclF1ZXJ5RnJvbVF1ZXJpZXModGhpcy5xdWVyaWVzKTtcbiAgICAgICAgdGhpcy5zdXBlclF1ZXJ5UGFyYW1zID0geydxdWVyeSc6IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzdXBlclF1ZXJ5KSksICdzaWxlbnQnOiB0cnVlfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuQW5kU29ydEluUmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCBmbGF0TGlzdCA9IFtdO1xuXG4gICAgdGhpcy5pblJlZmVyZW5jZXMuZm9yRWFjaChlbnRyeTEgPT4ge1xuICAgICAgZW50cnkxLmZvbGRlci5mb3JFYWNoKGVudHJ5MiA9PiB7XG4gICAgICAgIGVudHJ5Mi5mb2xkZXIuZm9yRWFjaChlbnRyeTMgPT4ge1xuICAgICAgICAgIGZsYXRMaXN0LnB1c2goe1xuICAgICAgICAgICAgLi4uZW50cnkzLFxuICAgICAgICAgICAgZW50cnkxVGl0bGU6IGVudHJ5MS50aXRsZSxcbiAgICAgICAgICAgIGVudHJ5MVR5cGU6IGVudHJ5MS50eXBlLFxuICAgICAgICAgICAgZW50cnkxQ291bnQ6IGVudHJ5MS5jb3VudCxcbiAgICAgICAgICAgIGVudHJ5MTogZW50cnkxLFxuICAgICAgICAgICAgZW50cnkyVGl0bGU6IGVudHJ5Mi50aXRsZSxcbiAgICAgICAgICAgIGVudHJ5MjogZW50cnkyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZmxhdExpc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdGl0bGVBID0gYT8udGl0bGU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICBjb25zdCB0aXRsZUIgPSBiPy50aXRsZT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgIHJldHVybiB0aXRsZUEubG9jYWxlQ29tcGFyZSh0aXRsZUIpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ3JvdXBlZCA9IG5ldyBNYXAoKTtcblxuICAgIGZsYXRMaXN0LmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gZW50cnkuZW50cnkxVGl0bGU7XG4gICAgICBpZiAoIWdyb3VwZWQuaGFzKGtleSkpIHtcbiAgICAgICAgZ3JvdXBlZC5zZXQoa2V5LCB7XG4gICAgICAgICAgdGl0bGU6IGVudHJ5LmVudHJ5MVRpdGxlLFxuICAgICAgICAgIHR5cGU6IGVudHJ5LmVudHJ5MVR5cGUsXG4gICAgICAgICAgY291bnQ6IGVudHJ5LmVudHJ5MUNvdW50LFxuICAgICAgICAgIGVudHJ5MTogZW50cnkuZW50cnkxLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGdyb3VwZWQuZ2V0KGtleSkuY2hpbGRyZW4ucHVzaChlbnRyeSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNvcnRlZEluUmVmZXJlbmNlcyA9IEFycmF5LmZyb20oZ3JvdXBlZC52YWx1ZXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN1cGVyUXVlcnlGcm9tUXVlcmllcyhxdWVyaWVzKSB7XG4gICAgbGV0IHN1cGVyUXVlcnkgPSB7XG4gICAgICB0ZXJtOiAnJyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZXhwZXJ0bW9kZTogdHJ1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBxdWVyaWVzLm91dFJlZmVyZW5jZVF1ZXJpZXMuZm9yRWFjaChxdWVyeSA9PiB7XG4gICAgICBpZiAocXVlcnkuZmlsdGVycykge1xuICAgICAgICBPYmplY3Qua2V5cyhxdWVyeS5maWx0ZXJzKVxuICAgICAgICAgIC5mb3JFYWNoKGZpbHRlck5hbWUgPT4gc3VwZXJRdWVyeS50ZXJtICs9IHRoaXMuY3JlYXRlU3VwZXJRdWVyeVRlcm1QYXJ0KHF1ZXJ5LCBmaWx0ZXJOYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlclF1ZXJ5LnRlcm0gKz0gJygnICsgcXVlcnkudGVybSArICcpJyArICcgT1IgJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHF1ZXJpZXMuaW5SZWZlcmVuY2VRdWVyaWVzLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICBpZiAocXVlcnkuZmlsdGVycykge1xuICAgICAgICBPYmplY3Qua2V5cyhxdWVyeS5maWx0ZXJzKVxuICAgICAgICAgIC5mb3JFYWNoKGZpbHRlck5hbWUgPT4gc3VwZXJRdWVyeS50ZXJtICs9IHRoaXMuY3JlYXRlU3VwZXJRdWVyeVRlcm1QYXJ0KHF1ZXJ5LCBmaWx0ZXJOYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlclF1ZXJ5LnRlcm0gKz0gcXVlcnkudGVybTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN1cGVyUXVlcnkudGVybSA9IHN1cGVyUXVlcnkudGVybS5yZXBsYWNlKG5ldyBSZWdFeHAoJywnLCAnZycpLCAnICcpOyAvLyByZXBsYWNlIGFsbCAnLCcgd2l0aCAnICdcbiAgICBzdXBlclF1ZXJ5LnRlcm0gPSBzdXBlclF1ZXJ5LnRlcm0ucmVwbGFjZShuZXcgUmVnRXhwKCcgT1IgJyArICckJyksICcnKTsgLy8gcmVtb3ZlIGxhc3QgJyBPUiAnXG5cbiAgICByZXR1cm4gc3VwZXJRdWVyeTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3VwZXJRdWVyeVRlcm1QYXJ0KHF1ZXJ5LCBmaWx0ZXJOYW1lKSB7XG4gICAgLy8gcmVzZXJ2ZWQgY2hhcmFjdGVycyBvZiBlbGFzdGljIHNlYXJjaFxuICAgIC8vIHRvZG86IGFkZCAnfHwnXG4gICAgY29uc3QgcmVzZXJ2ZWRDaGFycyA9IFsnXFxcXCcsICcvJywgJ1xcKycsICctJywgJz0nLCAnJiYnLCAnPicsICc8JywgJyEnLCAnXFwoJywgJ1xcKScsICdcXHsnLCAnXFx9JywgJ1xcWycsICdcXF0nLCAnXFxeJywgJ1wiJywgJ1xcficsICdcXConLCAnXFw/JywgJzonXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHF1ZXJ5LmZpbHRlcnNbZmlsdGVyTmFtZV07XG4gICAgbGV0IHZhbHVlID0gJycgKyBmaWx0ZXIudjEgKyAnJztcbiAgICByZXNlcnZlZENoYXJzLmZvckVhY2goY2hhciA9PiB7XG4gICAgICBpZiAodmFsdWUuaW5kZXhPZihjaGFyKSA+IC0xKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJyArIGNoYXIsICdnJyksICdcXFxcJyArIGNoYXIpOyAvLyBlc2NhcGVzIGFsbCByZXNlcnZlZCBjaGFyYWN0ZXJzXG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHR5cGVzID0gdGhpcy5nZXRTdWJUeXBlcyhxdWVyeS50eXBlc1swXSk7XG4gICAgdHlwZXMucHVzaChxdWVyeS50eXBlc1swXSk7XG4gICAgbGV0IGluZGV4TmFtZSA9IHRoaXMuZ2V0SW5kZXhOYW1lQnlRTmFtZShmaWx0ZXJOYW1lKTtcbiAgICBpZiAoIWluZGV4TmFtZSkge1xuICAgICAgaW5kZXhOYW1lID0gJ3N0cl8nICsgZmlsdGVyTmFtZS5yZXBsYWNlKCcuJywgJ18nKTtcbiAgICB9XG4gICAgcmV0dXJuICcoJyArIGluZGV4TmFtZSArICc6KCcgKyB2YWx1ZSArICcpIEFORCBrZXlfdHlwZTooJyArIHR5cGVzICsgJykpIE9SICc7XG4gIH1cblxuICBwcml2YXRlIGdldEluZGV4TmFtZUJ5UU5hbWUocW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdHlwZXNbaV0uZWxlbWVudHMuZmluZChlbCA9PiBlbC5xbmFtZSA9PT0gcW5hbWUpO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5kZXhuYW1lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ViVHlwZXModHlwZU5hbWUpIHtcbiAgICBsZXQgdHlwZXMgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZXMoKTtcbiAgICBsZXQgc3ViVHlwZXMgPSBbXTtcbiAgICB0eXBlcy5mb3JFYWNoKG9iamVjdFR5cGUgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gISFvYmplY3RUeXBlLnN1cGVydHlwZXMuZmluZCgodDogYW55KSA9PiB0Lm5hbWUgPT09IHR5cGVOYW1lKTtcbiAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgc3ViVHlwZXMucHVzaChvYmplY3RUeXBlLnFuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gc3ViVHlwZXM7XG4gIH1cblxuICBuYXZpZ2F0ZVRvUmVmZXJlbmNlKGV2ZW50LCBlbnRyeSkge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KC9vYmplY3R8cmVzdWx0fGZhdm9yaXRlc3xpbmJveHxwcm9jZXNzfG5vdGlmaWNhdGlvbnN8cmVjeWNsZWJpbi8pWzBdICsgJ29iamVjdC8nICsgZW50cnk/LmlkO1xuICAgIHdpbmRvdy5vcGVuKHVybCwgKGV2ZW50ICYmIGV2ZW50Py5jdHJsS2V5KSA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gIH1cblxuICBnZXRTZWFyY2hMaW5rKGVudHJ5KSB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICBmaWx0ZXJzOiB7fSxcbiAgICAgIHR5cGVzOiBbdGhpcy5zaG93SW5SZWZlcmVuY2VzID8gZW50cnkudHlwZSA6IGVudHJ5Lm9iamVjdFR5cGU/LnFuYW1lXSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZXhwZXJ0bW9kZTogZmFsc2VcbiAgICAgIH0sXG4gICAgICB0ZXJtOiAnJ1xuICAgIH07XG4gICAgaWYgKHRoaXMuc2hvd0luUmVmZXJlbmNlcykge1xuICAgICAgZW50cnkuZm9sZGVyLmZvckVhY2goZW50cnkyTGF5ZXIgPT4ge1xuICAgICAgICBxdWVyeS5maWx0ZXJzW2VudHJ5MkxheWVyLnJlZmVyZW5jZWZpZWxkXSA9IHtcbiAgICAgICAgICBvOiAnaW4nLFxuICAgICAgICAgIHYxOiBBcnJheS5pc0FycmF5KGVudHJ5MkxheWVyLnJlZmVyZW5jZXZhbHVlKSA/IGVudHJ5MkxheWVyLnJlZmVyZW5jZXZhbHVlIDogW2VudHJ5MkxheWVyLnJlZmVyZW5jZXZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBsZXQgc3VwZXJRdWVyeSA9IHtcbiAgICAgICAgdGVybTogJycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBleHBlcnRtb2RlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBPYmplY3Qua2V5cyhxdWVyeS5maWx0ZXJzKVxuICAgICAgICAuZm9yRWFjaChmaWx0ZXJOYW1lID0+IHN1cGVyUXVlcnkudGVybSArPSB0aGlzLmNyZWF0ZVN1cGVyUXVlcnlUZXJtUGFydChxdWVyeSwgZmlsdGVyTmFtZSkpO1xuICAgICAgc3VwZXJRdWVyeS50ZXJtID0gc3VwZXJRdWVyeS50ZXJtLnJlcGxhY2UobmV3IFJlZ0V4cCgnLCcsICdnJyksICcgJyk7IC8vIHJlcGxhY2UgYWxsICcsJyB3aXRoICcgJ1xuICAgICAgc3VwZXJRdWVyeS50ZXJtID0gc3VwZXJRdWVyeS50ZXJtLnJlcGxhY2UobmV3IFJlZ0V4cCgnIE9SICcgKyAnJCcpLCAnJyk7IC8vIHJlbW92ZSBsYXN0ICcgT1IgJ1xuICAgICAgcmV0dXJuIGByZXN1bHQ/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc3VwZXJRdWVyeSkpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5Lm9wdGlvbnMuZXhwZXJ0bW9kZSA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJ5LmZvbGRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBxdWVyeS50ZXJtICs9ICdfaWQ6JyArIGVudHJ5LmZvbGRlcltpXS5pZDtcbiAgICAgICAgaWYgKGkgIT09IGVudHJ5LmZvbGRlci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcXVlcnkudGVybSArPSAnIHx8ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBgcmVzdWx0P3F1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHF1ZXJ5KSl9YDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJlby1yZWZlcmVuY2VzXCI+XG4gIDxkaXYgY2xhc3M9XCJvYmplY3Qtbm90LWZvdW5kXCIgKm5nSWY9XCIhaW5SZWZlcmVuY2VzPy5sZW5ndGggJiYgIW91dFJlZmVyZW5jZXM/Lmxlbmd0aDsgZWxzZSByZWZDb250YWluZXJcIj5cbiAgICA8ZGl2Pnt7J2VvLnJlZmVyZW5jZXMub2JqZWN0Lm5vdGZvdW5kJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSAjcmVmQ29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJ1dHRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkbGFiZWxzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRsYWJlbFwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogc2hvd0luUmVmZXJlbmNlc31cIiAoY2xpY2spPVwic3dpdGNoTGlzdFZpc2liaWxpdHlUbygnaW4nKVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7J2VvLnJlZmVyZW5jZXMudG8ubGFiZWwnIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3snZW8ucmVmZXJlbmNlcy50by5sYWJlbCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZGxhYmVsXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBzaG93T3V0UmVmZXJlbmNlc31cIiAoY2xpY2spPVwic3dpdGNoTGlzdFZpc2liaWxpdHlUbygnb3V0JylcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eydlby5yZWZlcmVuY2VzLmZyb20ubGFiZWwnIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3snZW8ucmVmZXJlbmNlcy5mcm9tLmxhYmVsJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YSBjbGFzcz1cInJlc3VsdC1saXN0LWxpbmtcIiBbcm91dGVyTGlua109XCInL3Jlc3VsdCdcIiBbcXVlcnlQYXJhbXNdPVwic3VwZXJRdWVyeVBhcmFtc1wiPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImljb25cIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19vcGVuX3RhYi5zdmcnXCIgW2ljb25UaXRsZV09XCIoJ2VvLnJlZmVyZW5jZXMub3Blbi5yZXN1bHRsaXN0JyB8IHRyYW5zbGF0ZSlcIj48L2VvLWljb24+XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZW8tcmVmZXJlbmNlcy1saXN0c1wiPlxuXG4gICAgICA8IS0tIGxpc3Qgb2YgaW5SZWZlcmVuY2VzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdGxpc3QtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydoaWRkZW4nOiAhc2hvd0luUmVmZXJlbmNlc31cIj5cbiAgICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgPG1haW4gY2xhc3M9XCJsb2FkZXItb3ZlcmxheV9fbWFza1wiPlxuICAgICAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBbc2l6ZV09XCInbGFyZ2UnXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gICAgICAgICAgPC9tYWluPlxuICAgICAgICB9IEBlbHNlIGlmIChpblJlZmVyZW5jZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZlcmVuY2VMaXN0XCI+XG4gICAgICAgICAgICBAZm9yIChlbnRyeTFMYXllciBvZiBzb3J0ZWRJblJlZmVyZW5jZXM7IHRyYWNrIGVudHJ5MUxheWVyKSB7XG4gICAgICAgICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uXG4gICAgICAgICAgICAgICAgW2hlYWRlcl09XCJlbnRyeTFMYXllci50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2ljb25PYmplY3RUeXBlXT1cImdldE9iamVjdFR5cGUoZW50cnkxTGF5ZXIudHlwZSlcIlxuICAgICAgICAgICAgICAgIFtpdGVtQW1vdW50XT1cImVudHJ5MUxheWVyLmNvdW50XCJcbiAgICAgICAgICAgICAgICBbcmVzdWx0TGlzdExpbmtdPVwiZ2V0U2VhcmNoTGluayhlbnRyeTFMYXllci5lbnRyeTEpXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoZW50cnkzTGF5ZXIgb2YgZW50cnkxTGF5ZXIuY2hpbGRyZW47IHRyYWNrIGVudHJ5M0xheWVyKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiIChjbGljayk9XCJuYXZpZ2F0ZVRvUmVmZXJlbmNlKCRldmVudCwgZW50cnkzTGF5ZXIpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tlbnRyeTNMYXllcj8udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3tlbnRyeTNMYXllcj8uZGVzY3JpcHRpb259fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbW90ZS1lbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3snZW8ucmVmZXJlbmNlcy5maWVsZC5sYWJlbCcgfCB0cmFuc2xhdGV9fSB7e2VudHJ5M0xheWVyLmVudHJ5MlRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGZvdW5kXCI+e3snZW8ucmVmZXJlbmNlcy5vYmplY3Qubm90Zm91bmQnIHwgdHJhbnNsYXRlfX08L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gbGlzdCBvZiBvdXRSZWZlcmVuY2VzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdGxpc3QtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydoaWRkZW4nOiAhc2hvd091dFJlZmVyZW5jZXN9XCI+XG4gICAgICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICAgIDxtYWluIGNsYXNzPVwibG9hZGVyLW92ZXJsYXlfX21hc2tcIj5cbiAgICAgICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgW3NpemVdPVwiJ2xhcmdlJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgICAgIDwvbWFpbj5cbiAgICAgICAgfSBAZWxzZSBpZiAob3V0UmVmZXJlbmNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlZmVyZW5jZUxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKGVudHJ5MUxheWVyIG9mIG91dFJlZmVyZW5jZXM7IHRyYWNrIGVudHJ5MUxheWVyKSB7XG4gICAgICAgICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uXG4gICAgICAgICAgICAgICAgW2hlYWRlcl09XCJlbnRyeTFMYXllci50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2ljb25PYmplY3RUeXBlXT1cImVudHJ5MUxheWVyLm9iamVjdFR5cGVcIlxuICAgICAgICAgICAgICAgIFtpdGVtQW1vdW50XT1cImVudHJ5MUxheWVyLmZvbGRlci5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtyZXN1bHRMaXN0TGlua109XCJnZXRTZWFyY2hMaW5rKGVudHJ5MUxheWVyKVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGVudHJ5MkxheWVyIG9mIGVudHJ5MUxheWVyLmZvbGRlcjsgdHJhY2sgZW50cnkyTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9SZWZlcmVuY2UoJGV2ZW50LCBlbnRyeTJMYXllcilcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2VudHJ5MkxheWVyPy50aXRsZX19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e2VudHJ5MkxheWVyPy5kZXNjcmlwdGlvbn19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtb3RlLWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eydlby5yZWZlcmVuY2VzLmZpZWxkLmxhYmVsJyB8IHRyYW5zbGF0ZX19IHt7ZW50cnkyTGF5ZXIuZmllbGRMYWJlbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3Rmb3VuZFwiPnt7J2VvLnJlZmVyZW5jZXMub2JqZWN0Lm5vdGZvdW5kJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=