ngx-edu-sharing-ui 9.1.1 → 9.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/esm2022/lib/actionbar/actionbar.component.mjs +31 -16
  2. package/esm2022/lib/directives/icon.directive.mjs +24 -7
  3. package/esm2022/lib/dropdown/dropdown.component.mjs +15 -8
  4. package/esm2022/lib/edu-sharing-ui.module.mjs +5 -1
  5. package/esm2022/lib/list-items/list-text/list-text.component.mjs +3 -5
  6. package/esm2022/lib/mds/mds-helper.service.mjs +167 -0
  7. package/esm2022/lib/mds/mds.module.mjs +16 -0
  8. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
  9. package/esm2022/lib/node-entries/entries-model.mjs +1 -1
  10. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +6 -4
  11. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +2 -2
  12. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +7 -3
  13. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +5 -3
  14. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +8 -3
  15. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +7 -5
  16. package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
  17. package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
  18. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
  19. package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
  20. package/esm2022/lib/services/node-helper.service.mjs +5 -2
  21. package/esm2022/lib/services/options-helper-data.service.mjs +2 -2
  22. package/esm2022/lib/services/search-helper.service.mjs +52 -0
  23. package/esm2022/lib/services/ui.service.mjs +16 -1
  24. package/esm2022/lib/translations/translation-loader.mjs +12 -9
  25. package/esm2022/lib/translations/translations.service.mjs +24 -6
  26. package/esm2022/lib/types/option-item.mjs +6 -1
  27. package/esm2022/module.mjs +4 -1
  28. package/fesm2022/ngx-edu-sharing-ui.mjs +436 -111
  29. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  30. package/lib/actionbar/actionbar.component.d.ts +13 -3
  31. package/lib/directives/icon.directive.d.ts +5 -3
  32. package/lib/dropdown/dropdown.component.d.ts +6 -3
  33. package/lib/edu-sharing-ui.module.d.ts +7 -6
  34. package/lib/list-items/list-text/list-text.component.d.ts +1 -1
  35. package/lib/list-items/list-widget.d.ts +1 -1
  36. package/lib/mds/mds-helper.service.d.ts +37 -0
  37. package/lib/mds/mds.module.d.ts +6 -0
  38. package/lib/node-entries/entries-model.d.ts +1 -1
  39. package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +1 -1
  40. package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +1 -0
  41. package/lib/node-entries/option-button/option-button.component.d.ts +2 -1
  42. package/lib/pipes/node-title.pipe.d.ts +2 -1
  43. package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
  44. package/lib/services/abstract/options-helper.service.d.ts +1 -1
  45. package/lib/services/node-helper.service.d.ts +2 -2
  46. package/lib/services/options-helper-data.service.d.ts +3 -3
  47. package/lib/services/search-helper.service.d.ts +21 -0
  48. package/lib/services/ui.service.d.ts +7 -1
  49. package/lib/translations/translations.service.d.ts +5 -2
  50. package/lib/types/option-item.d.ts +7 -2
  51. package/module.d.ts +3 -0
  52. package/package.json +1 -1
@@ -65,7 +65,7 @@ export class NodeEntriesCardComponent {
65
65
  return [];
66
66
  // return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
67
67
  }
68
- openContextmenu(event) {
68
+ openContextmenu(event, node) {
69
69
  event.stopPropagation();
70
70
  event.preventDefault();
71
71
  if (!this.dropdown) {
@@ -85,6 +85,8 @@ export class NodeEntriesCardComponent {
85
85
  }
86
86
  // Wait for the menu to reflect changed options.
87
87
  setTimeout(() => {
88
+ this.dropdown.callbackObject = node;
89
+ this.dropdown.ngOnChanges();
88
90
  if (this.dropdown.canShowDropdown()) {
89
91
  this.menuTrigger.openMenu();
90
92
  }
@@ -115,11 +117,11 @@ export class NodeEntriesCardComponent {
115
117
  }, this.node);
116
118
  }
117
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardComponent, deps: [{ token: i1.NodeEntriesService }, { token: i2.NodeHelperService }, { token: i0.ApplicationRef }, { token: i3.ConfigService }, { token: i3.AuthenticationService }, { token: i4.NodeEntriesTemplatesService }, { token: i5.NodeEntriesGlobalService }, { token: i6.Toast, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
118
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i10.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i11.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i15.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i16.NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: i17.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: i18.NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: i19.OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: i20.NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i21.PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: i22.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }, { kind: "pipe", type: i24.ListItemLabelPipe, name: "esListItemLabel" }] }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i10.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i11.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i15.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i16.NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: i17.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: i18.NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: i19.OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: i20.NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i21.PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: i22.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }, { kind: "pipe", type: i24.ListItemLabelPipe, name: "esListItemLabel" }] }); }
119
121
  }
120
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
121
123
  type: Component,
122
- args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
124
+ args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
123
125
  }], ctorParameters: function () { return [{ type: i1.NodeEntriesService }, { type: i2.NodeHelperService }, { type: i0.ApplicationRef }, { type: i3.ConfigService }, { type: i3.AuthenticationService }, { type: i4.NodeEntriesTemplatesService }, { type: i5.NodeEntriesGlobalService }, { type: i6.Toast, decorators: [{
124
126
  type: Optional
125
127
  }] }]; }, propDecorators: { dropdown: [{
@@ -130,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
130
132
  }], node: [{
131
133
  type: Input
132
134
  }] } });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU92QyxNQUFNLE9BQU8sd0JBQXdCO0lBY2pDLFlBQ1csY0FBcUMsRUFDckMsVUFBNkIsRUFDN0IsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLGdCQUE2QyxFQUM3Qyx3QkFBa0QsRUFDckMsS0FBWTtRQVB6QixtQkFBYyxHQUFkLGNBQWMs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LHdCQUF3QixDQUFDLHNCQUFzQixDQUN2RDtZQUNJLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSTtTQUNQLEVBQ0QsSUFBSSxDQUFDLElBQVksQ0FDcEIsQ0FBQztJQUNOLENBQUM7OEdBeEdRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZPQzdCckMsNHlNQWlMQTs7MkZEcEphLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDSSxzQkFBc0I7OzBCQTBCM0IsUUFBUTs0Q0FqQkosUUFBUTtzQkFBaEIsS0FBSztnQkFFb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUVmLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IENsaWNrU291cmNlLCBJbnRlcmFjdGlvblR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21GaWVsZFNwZWNpYWxUeXBlLCBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgQ29uZmlnU2VydmljZSwgTm9kZSwgUmVzdENvbnN0YW50cyB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgQ29sb3JIZWxwZXIsIFByZWZlcnJlZENvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2xvci1oZWxwZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWJzdHJhY3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtY2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVFbnRyaWVzQ2FyZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgcmVhZG9ubHkgSW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlO1xuICAgIHJlYWRvbmx5IFRhcmdldCA9IFRhcmdldDtcbiAgICByZWFkb25seSBDbGlja1NvdXJjZSA9IENsaWNrU291cmNlO1xuICAgIHJlYWRvbmx5IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUgPSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlO1xuICAgIEBJbnB1dCgpIGRyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ21lbnVUcmlnZ2VyJykgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgbm9kZTogVDtcbiAgICBkcm9wZG93bkxlZnQ6IG51bWJlcjtcbiAgICBkcm9wZG93blRvcDogbnVtYmVyO1xuICAgIHNob3dSYXRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgaXNDb2xsZWN0aW9uOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIG5vZGVIZWxwZXI6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdGVtcGxhdGVzU2VydmljZTogTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgbm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlOiBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3Q6IFRvYXN0LFxuICAgICkge31cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NvbGxlY3Rpb24gPSB0aGlzLm5vZGVIZWxwZXIuaXNOb2RlQ29sbGVjdGlvbihjaGFuZ2VzLm5vZGU/LmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0VGV4dENvbG9yKCkge1xuICAgICAgICByZXR1cm4gQ29sb3JIZWxwZXIuZ2V0UHJlZmVycmVkQ29sb3IodGhpcy5ub2RlLmNvbGxlY3Rpb24uY29sb3IpID09PSBQcmVmZXJyZWRDb2xvci5CbGFja1xuICAgICAgICAgICAgPyAnIzAwMCdcbiAgICAgICAgICAgIDogJyNmZmYnO1xuICAgIH1cbiAgICBvcHRpb25zT25DYXJkKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lbnRyaWVzU2VydmljZS5vcHRpb25zPy5bVGFyZ2V0Lkxpc3RdO1xuICAgICAgICBjb25zdCBhbHdheXMgPSBvcHRpb25zPy5maWx0ZXIoKG8pID0+IG8uc2hvd0Fsd2F5cyk7XG4gICAgICAgIGlmIChhbHdheXM/LnNvbWUoKG8pID0+IG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWx3YXlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGRvIE5PVCBzaG93IGFueSBhZGRpdGlvbmFsIGFjdGlvbnNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAvLyByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG8pID0+IG8uc2hvd0FzQWN0aW9uICYmIG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpLnNsaWNlKDAsIDMpO1xuICAgIH1cblxuICAgIG9wZW5Db250ZXh0bWVudShldmVudDogTW91c2VFdmVudCB8IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgICAgIC8vIENhbGwgYHByZXZlbnREZWZhdWx0KClgIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBtZW51LCBzbyB3ZSBjYW4gdXNlIGBjZGtEcmFnYCB3aXRoIGFcbiAgICAgICAgICAgIC8vIHN0YXJ0IGRlbGF5IHdpdGhvdXQgYmVpbmcgaW50ZXJydXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGxvbmctdGFwIGFjdGlvbi5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAoeyBjbGllbnRYOiB0aGlzLmRyb3Bkb3duTGVmdCwgY2xpZW50WTogdGhpcy5kcm9wZG93blRvcCB9ID0gZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHsgeDogdGhpcy5kcm9wZG93bkxlZnQsIHk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IChcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQuaW5jbHVkZXModGhpcy5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBtZW51IHRvIHJlZmxlY3QgY2hhbmdlZCBvcHRpb25zLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmNhblNob3dEcm9wZG93bigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdOT19BVkFJTEFCTEVfT1BUSU9OUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucz8uZmlsdGVyKChjKSA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5NZW51KG5vZGU6IFQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGlja1NvdXJjZSA9IENsaWNrU291cmNlLkRyb3Bkb3duO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zaG93UmF0aW5ncy5uZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmhhc1Rvb2xwZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShuYW1lOiBDdXN0b21GaWVsZFNwZWNpYWxUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21GaWVsZFRlbXBsYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOT0RFJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMubm9kZSBhcyBOb2RlLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgW2NsYXNzXT1cIlxuICAgICdncmlkLWNhcmQnICtcbiAgICAoaXNDb2xsZWN0aW9uXG4gICAgICA/ICcgZ3JpZC1jYXJkLWNvbGxlY3Rpb24gZ3JpZC1jYXJkLWNvbGxlY3Rpb24tc2NvcGUtJyArXG4gICAgICAgIG5vZGUuY29sbGVjdGlvbi5zY29wZSArXG4gICAgICAgICcgZ3JpZC1jYXJkLWNvbGxlY3Rpb24tdHlwZS0nICtcbiAgICAgICAgbm9kZS5jb2xsZWN0aW9uLnR5cGVcbiAgICAgIDogJycpICtcbiAgICAoJGFueShub2RlKS52aXJ0dWFsID8gJyBncmlkLWNhcmQtdmlydHVhbCcgOiAnJykgK1xuICAgICcgJyArXG4gICAgbm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLmdldEN1c3RvbUNzc0NsYXNzKG5vZGUpXG4gIFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICBbY2xhc3MuZHluYW1pYy1zaW5nbGUtY2xpY2tdPVwiZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID09PSAnZHluYW1pYydcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudClcIlxuICAoa2V5ZG93bi5Db250ZXh0TWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheVwiXG4gICAgY2xhc3M9XCJjYXJkLW92ZXJsYXlcIlxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmNsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5PdmVybGF5XG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucyB8fCBzaG93UmF0aW5nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH1cIlxuICAgICAgICBkYXRhLXRlc3Q9XCJjYXJkLW9wdGlvbnMtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2ltYWdlIGxldC1wbGF5QW5pbWF0aW9uPVwicGxheUFuaW1hdGlvblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1pbWFnZS1hcmVhXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpIGFzIHJlZlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmOyBjb250ZXh0OiB7IG5vZGU6IHRoaXMubm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KVwiPlxuICAgICAgICA8ZXMtcHJldmlldy1pbWFnZVxuICAgICAgICAgICpuZ0lmPVwiIShpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvbilcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIFtwbGF5QW5pbWF0aW9uXT1cInBsYXlBbmltYXRpb25cIlxuICAgICAgICA+PC9lcy1wcmV2aWV3LWltYWdlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb25cIiBjbGFzcz1cImNhcmQtY29sbGVjdGlvbi1pbWFnZVwiPlxuICAgICAgICAgIDxpIGVzSWNvbj1cImxheWVyc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtZXRhIGxldC1saW5rPVwibGlua1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1ldGFcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc3BsYXlQYXJ0IG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW1ldGEtcm93IGNhcmQtbWV0YS1yb3cte3sgZGlzcGxheVBhcnQubmFtZSB8IGxvd2VyY2FzZSB8IHByb3BlcnR5U2x1ZyB9fVwiXG4gICAgICAgIFtjbGFzcy5jYXJkLW1ldGEtcm93LXByaW1hcnldPVwiZmlyc3RcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RcIj5cbiAgICAgICAgICA8ZXMtbm9kZS11cmxcbiAgICAgICAgICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgI2xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9lcy1ub2RlLXVybD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCI+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgZGlzcGxheVBhcnQgfCBlc0xpc3RJdGVtTGFiZWwgfCBhc3luYyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU92QyxNQUFNLE9BQU8sd0JBQXdCO0lBY2pDLFlBQ1csY0FBcUMsRUFDckMsVUFBNkIsRUFDN0IsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLGdCQUE2QyxFQUM3Qyx3QkFBa0QsRUFDckMsS0FBWTtRQVB6QixtQkFBYyxHQUFkLGNBQWMs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QixDQUMvQyxhQUFhLENBQUMsd0JBQXdCLENBQ3pDLENBQUMsQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUE0QjtRQUNwQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsQ0FDdkQ7WUFDSSxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUk7U0FDUCxFQUNELElBQUksQ0FBQyxJQUFZLENBQ3BCLENBQUM7SUFDTixDQUFDOzhHQTFHUSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw2T0M3QnJDLHd6TUFpTEE7OzJGRHBKYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksc0JBQXNCOzswQkEwQjNCLFFBQVE7NENBakJKLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRW9CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFZixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBDbGlja1NvdXJjZSwgSW50ZXJhY3Rpb25UeXBlIH0gZnJvbSAnLi4vZW50cmllcy1tb2RlbCc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSwgTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UsIENvbmZpZ1NlcnZpY2UsIE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IENvbG9ySGVscGVyLCBQcmVmZXJyZWRDb2xvciB9IGZyb20gJy4uLy4uL3V0aWwvY29sb3ItaGVscGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2FzdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fic3RyYWN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXMtbm9kZS1lbnRyaWVzLWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlRW50cmllc0NhcmRDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHJlYWRvbmx5IEludGVyYWN0aW9uVHlwZSA9IEludGVyYWN0aW9uVHlwZTtcbiAgICByZWFkb25seSBUYXJnZXQgPSBUYXJnZXQ7XG4gICAgcmVhZG9ubHkgQ2xpY2tTb3VyY2UgPSBDbGlja1NvdXJjZTtcbiAgICByZWFkb25seSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlID0gQ3VzdG9tRmllbGRTcGVjaWFsVHlwZTtcbiAgICBASW5wdXQoKSBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdtZW51VHJpZ2dlcicpIG1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICAgIEBJbnB1dCgpIG5vZGU6IFQ7XG4gICAgZHJvcGRvd25MZWZ0OiBudW1iZXI7XG4gICAgZHJvcGRvd25Ub3A6IG51bWJlcjtcbiAgICBzaG93UmF0aW5ncyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIGlzQ29sbGVjdGlvbjogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVudHJpZXNTZXJ2aWNlOiBOb2RlRW50cmllc1NlcnZpY2U8VD4sXG4gICAgICAgIHB1YmxpYyBub2RlSGVscGVyOiBOb2RlSGVscGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHVibGljIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0OiBUb2FzdCxcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDb2xsZWN0aW9uID0gdGhpcy5ub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24oY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIENvbG9ySGVscGVyLmdldFByZWZlcnJlZENvbG9yKHRoaXMubm9kZS5jb2xsZWN0aW9uLmNvbG9yKSA9PT0gUHJlZmVycmVkQ29sb3IuQmxhY2tcbiAgICAgICAgICAgID8gJyMwMDAnXG4gICAgICAgICAgICA6ICcjZmZmJztcbiAgICB9XG4gICAgb3B0aW9uc09uQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9ucz8uW1RhcmdldC5MaXN0XTtcbiAgICAgICAgY29uc3QgYWx3YXlzID0gb3B0aW9ucz8uZmlsdGVyKChvKSA9PiBvLnNob3dBbHdheXMpO1xuICAgICAgICBpZiAoYWx3YXlzPy5zb21lKChvKSA9PiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFsd2F5cztcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBkbyBOT1Qgc2hvdyBhbnkgYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgLy8gcmV0dXJuIG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBc0FjdGlvbiAmJiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKS5zbGljZSgwLCAzKTtcbiAgICB9XG5cbiAgICBvcGVuQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBFdmVudCwgbm9kZTogVCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAvLyBDYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBldmVuIHdoZW4gdGhlcmUgaXMgbm8gbWVudSwgc28gd2UgY2FuIHVzZSBgY2RrRHJhZ2Agd2l0aCBhXG4gICAgICAgICAgICAvLyBzdGFydCBkZWxheSB3aXRob3V0IGJlaW5nIGludGVycnVwdGVkIGJ5IHRoZSBzdGFuZGFyZCBsb25nLXRhcCBhY3Rpb24uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICAgICAgKHsgY2xpZW50WDogdGhpcy5kcm9wZG93bkxlZnQsIGNsaWVudFk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICh7IHg6IHRoaXMuZHJvcGRvd25MZWZ0LCB5OiB0aGlzLmRyb3Bkb3duVG9wIH0gPSAoXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmluY2x1ZGVzKHRoaXMubm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgbWVudSB0byByZWZsZWN0IGNoYW5nZWQgb3B0aW9ucy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNhbGxiYWNrT2JqZWN0ID0gbm9kZTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ubmdPbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmNhblNob3dEcm9wZG93bigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdOT19BVkFJTEFCTEVfT1BUSU9OUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucz8uZmlsdGVyKChjKSA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5NZW51KG5vZGU6IFQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGlja1NvdXJjZSA9IENsaWNrU291cmNlLkRyb3Bkb3duO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zaG93UmF0aW5ncy5uZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmhhc1Rvb2xwZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShuYW1lOiBDdXN0b21GaWVsZFNwZWNpYWxUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21GaWVsZFRlbXBsYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOT0RFJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMubm9kZSBhcyBOb2RlLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgW2NsYXNzXT1cIlxuICAgICdncmlkLWNhcmQnICtcbiAgICAoaXNDb2xsZWN0aW9uXG4gICAgICA/ICcgZ3JpZC1jYXJkLWNvbGxlY3Rpb24gZ3JpZC1jYXJkLWNvbGxlY3Rpb24tc2NvcGUtJyArXG4gICAgICAgIG5vZGUuY29sbGVjdGlvbi5zY29wZSArXG4gICAgICAgICcgZ3JpZC1jYXJkLWNvbGxlY3Rpb24tdHlwZS0nICtcbiAgICAgICAgbm9kZS5jb2xsZWN0aW9uLnR5cGVcbiAgICAgIDogJycpICtcbiAgICAoJGFueShub2RlKS52aXJ0dWFsID8gJyBncmlkLWNhcmQtdmlydHVhbCcgOiAnJykgK1xuICAgICcgJyArXG4gICAgbm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLmdldEN1c3RvbUNzc0NsYXNzKG5vZGUpXG4gIFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICBbY2xhc3MuZHluYW1pYy1zaW5nbGUtY2xpY2tdPVwiZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID09PSAnZHluYW1pYydcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudCwgbm9kZSlcIlxuICAoa2V5ZG93bi5Db250ZXh0TWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50LCBub2RlKVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheVwiXG4gICAgY2xhc3M9XCJjYXJkLW92ZXJsYXlcIlxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmNsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5PdmVybGF5XG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucyB8fCBzaG93UmF0aW5nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH1cIlxuICAgICAgICBkYXRhLXRlc3Q9XCJjYXJkLW9wdGlvbnMtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2ltYWdlIGxldC1wbGF5QW5pbWF0aW9uPVwicGxheUFuaW1hdGlvblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1pbWFnZS1hcmVhXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpIGFzIHJlZlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmOyBjb250ZXh0OiB7IG5vZGU6IHRoaXMubm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KVwiPlxuICAgICAgICA8ZXMtcHJldmlldy1pbWFnZVxuICAgICAgICAgICpuZ0lmPVwiIShpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvbilcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIFtwbGF5QW5pbWF0aW9uXT1cInBsYXlBbmltYXRpb25cIlxuICAgICAgICA+PC9lcy1wcmV2aWV3LWltYWdlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb25cIiBjbGFzcz1cImNhcmQtY29sbGVjdGlvbi1pbWFnZVwiPlxuICAgICAgICAgIDxpIGVzSWNvbj1cImxheWVyc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtZXRhIGxldC1saW5rPVwibGlua1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1ldGFcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc3BsYXlQYXJ0IG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW1ldGEtcm93IGNhcmQtbWV0YS1yb3cte3sgZGlzcGxheVBhcnQubmFtZSB8IGxvd2VyY2FzZSB8IHByb3BlcnR5U2x1ZyB9fVwiXG4gICAgICAgIFtjbGFzcy5jYXJkLW1ldGEtcm93LXByaW1hcnldPVwiZmlyc3RcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RcIj5cbiAgICAgICAgICA8ZXMtbm9kZS11cmxcbiAgICAgICAgICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgI2xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9lcy1ub2RlLXVybD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCI+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgZGlzcGxheVBhcnQgfCBlc0xpc3RJdGVtTGFiZWwgfCBhc3luYyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -34,11 +34,11 @@ export class NodeEntriesCardSmallComponent {
34
34
  event.stopPropagation();
35
35
  }
36
36
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardSmallComponent, deps: [{ token: i1.NodeEntriesService }, { token: i2.NodeHelperService }, { token: i3.NodeEntriesTemplatesService }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:rgba(255,255,255,.5);border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i6.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i7.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i8.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i9.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }] }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:rgba(255,255,255,.5);border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i6.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i7.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i8.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i9.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }] }); }
38
38
  }
39
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardSmallComponent, decorators: [{
40
40
  type: Component,
41
- args: [{ selector: 'es-node-entries-card-small', template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:rgba(255,255,255,.5);border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"] }]
41
+ args: [{ selector: 'es-node-entries-card-small', template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:rgba(255,255,255,.5);border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"] }]
42
42
  }], ctorParameters: function () { return [{ type: i1.NodeEntriesService }, { type: i2.NodeHelperService }, { type: i3.NodeEntriesTemplatesService }]; }, propDecorators: { node: [{
43
43
  type: Input
44
44
  }] } });
@@ -1,5 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import { NodeEntriesDisplayType } from '../entries-model';
3
+ import { map } from 'rxjs/operators';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../services/node-entries.service";
5
6
  import * as i2 from "@angular/common";
@@ -11,13 +12,16 @@ export class NodeEntriesGlobalOptionsComponent {
11
12
  this.entriesService = entriesService;
12
13
  this.NodeEntriesDisplayType = NodeEntriesDisplayType;
13
14
  }
15
+ getEnabledOptions() {
16
+ return this.entriesService.globalOptionsSubject.pipe(map((options) => options.filter((e) => e.isEnabled)));
17
+ }
14
18
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesGlobalOptionsComponent, deps: [{ token: i1.NodeEntriesService }], target: i0.ɵɵFactoryTarget.Component }); }
15
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: { displayType: "displayType" }, ngImport: i0, template: "<div\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of entriesService.globalOptionsSubject | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--mobileWidth: 700px;--mobileStage: 100px;--itemSelectedTextColor: var(--palette-primary-700);--listItemSelectedBackground: var(--palette-primary-50);--listItemSelectedBackgroundEffect: linear-gradient( to right, var(--primary) 0, var(--primary) 5px, var(--palette-primary-50) 5px, var(--palette-primary-50) 5px ) no-repeat}.global-options{display:grid;grid-template-columns:auto;grid-template-rows:repeat(auto-fit,minmax(70px,1fr));grid-row-gap:20px;height:100%;min-height:250px}.global-options.global-options-small{min-height:130px}.global-options.global-options-table{min-height:100px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-column-gap:20px}.global-options .global-option-btn{display:flex;height:100%;padding:0}.global-options .global-option{cursor:pointer;display:flex;box-shadow:0 0 5px #0000004d;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;border:3px dashed var(--primary);color:var(--primary)}.global-options .global-option>i{font-size:32px;margin-bottom:5px}.global-options .global-option>.label{cursor:pointer;font-weight:700}.global-options .global-option:hover,.global-options .global-option:focus{background-color:rgb(var(--palette-primary-50))}:host ::ng-deep .global-options .global-option-btn .mdc-button__label{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: { displayType: "displayType" }, ngImport: i0, template: "<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--mobileWidth: 700px;--mobileStage: 100px;--itemSelectedTextColor: var(--palette-primary-700);--listItemSelectedBackground: var(--palette-primary-50);--listItemSelectedBackgroundEffect: linear-gradient( to right, var(--primary) 0, var(--primary) 5px, var(--palette-primary-50) 5px, var(--palette-primary-50) 5px ) no-repeat}.global-options{display:grid;grid-template-columns:auto;grid-template-rows:repeat(auto-fit,minmax(70px,1fr));grid-row-gap:20px;height:100%;min-height:250px}.global-options.global-options-small{min-height:130px}.global-options.global-options-table{min-height:100px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-column-gap:20px}.global-options .global-option-btn{display:flex;height:100%;padding:0}.global-options .global-option{cursor:pointer;display:flex;box-shadow:0 0 5px #0000004d;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;border:3px dashed var(--primary);color:var(--primary)}.global-options .global-option>i{font-size:32px;margin-bottom:5px}.global-options .global-option>.label{cursor:pointer;font-weight:700}.global-options .global-option:hover,.global-options .global-option:focus{background-color:rgb(var(--palette-primary-50))}:host ::ng-deep .global-options .global-option-btn .mdc-button__label{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16
20
  }
17
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesGlobalOptionsComponent, decorators: [{
18
22
  type: Component,
19
- args: [{ selector: 'es-node-entries-global-options', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of entriesService.globalOptionsSubject | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--mobileWidth: 700px;--mobileStage: 100px;--itemSelectedTextColor: var(--palette-primary-700);--listItemSelectedBackground: var(--palette-primary-50);--listItemSelectedBackgroundEffect: linear-gradient( to right, var(--primary) 0, var(--primary) 5px, var(--palette-primary-50) 5px, var(--palette-primary-50) 5px ) no-repeat}.global-options{display:grid;grid-template-columns:auto;grid-template-rows:repeat(auto-fit,minmax(70px,1fr));grid-row-gap:20px;height:100%;min-height:250px}.global-options.global-options-small{min-height:130px}.global-options.global-options-table{min-height:100px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-column-gap:20px}.global-options .global-option-btn{display:flex;height:100%;padding:0}.global-options .global-option{cursor:pointer;display:flex;box-shadow:0 0 5px #0000004d;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;border:3px dashed var(--primary);color:var(--primary)}.global-options .global-option>i{font-size:32px;margin-bottom:5px}.global-options .global-option>.label{cursor:pointer;font-weight:700}.global-options .global-option:hover,.global-options .global-option:focus{background-color:rgb(var(--palette-primary-50))}:host ::ng-deep .global-options .global-option-btn .mdc-button__label{width:100%;height:100%}\n"] }]
23
+ args: [{ selector: 'es-node-entries-global-options', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--mobileWidth: 700px;--mobileStage: 100px;--itemSelectedTextColor: var(--palette-primary-700);--listItemSelectedBackground: var(--palette-primary-50);--listItemSelectedBackgroundEffect: linear-gradient( to right, var(--primary) 0, var(--primary) 5px, var(--palette-primary-50) 5px, var(--palette-primary-50) 5px ) no-repeat}.global-options{display:grid;grid-template-columns:auto;grid-template-rows:repeat(auto-fit,minmax(70px,1fr));grid-row-gap:20px;height:100%;min-height:250px}.global-options.global-options-small{min-height:130px}.global-options.global-options-table{min-height:100px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-column-gap:20px}.global-options .global-option-btn{display:flex;height:100%;padding:0}.global-options .global-option{cursor:pointer;display:flex;box-shadow:0 0 5px #0000004d;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;border:3px dashed var(--primary);color:var(--primary)}.global-options .global-option>i{font-size:32px;margin-bottom:5px}.global-options .global-option>.label{cursor:pointer;font-weight:700}.global-options .global-option:hover,.global-options .global-option:focus{background-color:rgb(var(--palette-primary-50))}:host ::ng-deep .global-options .global-option-btn .mdc-button__label{width:100%;height:100%}\n"] }]
20
24
  }], ctorParameters: function () { return [{ type: i1.NodeEntriesService }]; }, propDecorators: { displayType: [{
21
25
  type: Input
22
26
  }] } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWdsb2JhbC1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucy9ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWdsb2JhbC1vcHRpb25zL25vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVMxRCxNQUFNLE9BQU8saUNBQWlDO0lBRzFDLFlBQW1CLGNBQXFDO1FBQXJDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUYvQywyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztJQUVFLENBQUM7OEdBSG5ELGlDQUFpQztrR0FBakMsaUNBQWlDLDhHQ1g5Qyw0MUJBdUJBOzsyRkRaYSxpQ0FBaUM7a0JBTjdDLFNBQVM7K0JBQ0ksZ0NBQWdDLG1CQUd6Qix1QkFBdUIsQ0FBQyxNQUFNO3lHQUl0QyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlRW50cmllc0dsb2JhbE9wdGlvbnNDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IHtcbiAgICByZWFkb25seSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlID0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZTtcbiAgICBASW5wdXQoKSBkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZTtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPikge31cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCIoZW50cmllc1NlcnZpY2UuZ2xvYmFsT3B0aW9uc1N1YmplY3QgfCBhc3luYyk/Lmxlbmd0aFwiXG4gIHJvbGU9XCJsaXN0aXRlbVwiXG4gIGNsYXNzPVwiZ2xvYmFsLW9wdGlvbnNcIlxuICBbY2xhc3MuZ2xvYmFsLW9wdGlvbnMtc21hbGxdPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgW2NsYXNzLmdsb2JhbC1vcHRpb25zLXRhYmxlXT1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlRhYmxlXCJcbj5cbiAgPGJ1dHRvblxuICAgIG1hdC1idXR0b25cbiAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGVudHJpZXNTZXJ2aWNlLmdsb2JhbE9wdGlvbnNTdWJqZWN0IHwgYXN5bmNcIlxuICAgIChjbGljayk9XCJvcHRpb24uY2FsbGJhY2soKVwiXG4gICAgY2xhc3M9XCJnbG9iYWwtb3B0aW9uLWJ0blwiXG4gICAgYXR0ci5kYXRhLXRlc3Q9XCJjYXJkLWJ1dHRvbi17eyBvcHRpb24ubmFtZSB9fVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2xvYmFsT3B0aW9uOyBjb250ZXh0OiB7IG9wdGlvbjogdGhpcy5vcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnbG9iYWxPcHRpb24gbGV0LW9wdGlvbj1cIm9wdGlvblwiPlxuICA8c3BhbiBjbGFzcz1cImdsb2JhbC1vcHRpb25cIj5cbiAgICA8aSBbZXNJY29uXT1cIm9wdGlvbi5pY29uXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyBvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWdsb2JhbC1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucy9ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWdsb2JhbC1vcHRpb25zL25vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFRckMsTUFBTSxPQUFPLGlDQUFpQztJQUcxQyxZQUFtQixjQUFxQztRQUFyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFGL0MsMkJBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFFRSxDQUFDO0lBRTVELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQ2hELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3ZELENBQUM7SUFDTixDQUFDOzhHQVRRLGlDQUFpQztrR0FBakMsaUNBQWlDLDhHQ1o5Qyw0ekJBdUJBOzsyRkRYYSxpQ0FBaUM7a0JBTjdDLFNBQVM7K0JBQ0ksZ0NBQWdDLG1CQUd6Qix1QkFBdUIsQ0FBQyxNQUFNO3lHQUl0QyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlRW50cmllc0dsb2JhbE9wdGlvbnNDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IHtcbiAgICByZWFkb25seSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlID0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZTtcbiAgICBASW5wdXQoKSBkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZTtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPikge31cblxuICAgIGdldEVuYWJsZWRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzU2VydmljZS5nbG9iYWxPcHRpb25zU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcHRpb25zKSA9PiBvcHRpb25zLmZpbHRlcigoZSkgPT4gZS5pc0VuYWJsZWQpKSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwiKGdldEVuYWJsZWRPcHRpb25zKCkgfCBhc3luYyk/Lmxlbmd0aFwiXG4gIHJvbGU9XCJsaXN0aXRlbVwiXG4gIGNsYXNzPVwiZ2xvYmFsLW9wdGlvbnNcIlxuICBbY2xhc3MuZ2xvYmFsLW9wdGlvbnMtc21hbGxdPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgW2NsYXNzLmdsb2JhbC1vcHRpb25zLXRhYmxlXT1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlRhYmxlXCJcbj5cbiAgPGJ1dHRvblxuICAgIG1hdC1idXR0b25cbiAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldEVuYWJsZWRPcHRpb25zKCkgfCBhc3luY1wiXG4gICAgKGNsaWNrKT1cIm9wdGlvbi5jYWxsYmFjaygpXCJcbiAgICBjbGFzcz1cImdsb2JhbC1vcHRpb24tYnRuXCJcbiAgICBhdHRyLmRhdGEtdGVzdD1cImNhcmQtYnV0dG9uLXt7IG9wdGlvbi5uYW1lIH19XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnbG9iYWxPcHRpb247IGNvbnRleHQ6IHsgb3B0aW9uOiB0aGlzLm9wdGlvbiB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2dsb2JhbE9wdGlvbiBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XG4gIDxzcGFuIGNsYXNzPVwiZ2xvYmFsLW9wdGlvblwiPlxuICAgIDxpIFtlc0ljb25dPVwib3B0aW9uLmljb25cIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IG9wdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19