ngx-edu-sharing-ui 9.0.1 → 9.0.2

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.
@@ -25,11 +25,8 @@
25
25
  @mixin materialShadowSmall($important: false) {
26
26
  box-shadow: 0 0 3px rgba(0, 0, 0, 0.3) if($important, !important, null);
27
27
  }
28
- @mixin materialShadowMedium($important: false, $opacity: 0.6) {
29
- box-shadow: 0 0 10px rgba(0, 0, 0, $opacity) if($important, !important, null);
30
- }
31
28
  @mixin materialShadowMediumLarge($important: false, $opacity: 0.6) {
32
- box-shadow: 0 0 20px rgba(0, 0, 0, $opacity) if($important, !important, null);
29
+ box-shadow: 0 0 25px rgba(0, 0, 0, $opacity) if($important, !important, null);
33
30
  }
34
31
  @mixin materialScrollbar() {
35
32
  &::-webkit-scrollbar-track {
@@ -10,7 +10,6 @@
10
10
  --textMediumLight: #888;
11
11
  --textMain: #383838;
12
12
  --cardWidth: 240px;
13
- --cardRoundness: 15px;
14
13
  --colorStatusPositive: #40bf8e;
15
14
  --colorStatusNegative: var(--warning);
16
15
  --colorStarActive: #ba7c00;
@@ -31,6 +30,4 @@
31
30
  var(--palette-primary-50) 5px
32
31
  )
33
32
  no-repeat;
34
- // default roundness of material3 components
35
- --defaultRoundness: 25px;
36
33
  }
@@ -113,11 +113,11 @@ export class NodeEntriesCardComponent {
113
113
  }, this.node);
114
114
  }
115
115
  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 }); }
116
- 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=\"grid-card\"\n [class.grid-card-collection]=\"isCollection\"\n [class.grid-card-virtual]=\"$any(node).virtual\"\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 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=\"showRatings | async\">\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 }}\"\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 0 10px #0003;border-radius:var(--cardRoundness);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%}.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 5px;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 20px #0000004d;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.25em;max-height:2.5em;-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.25em;max-height:2.5em;-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.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i9.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { 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.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }, { kind: "pipe", type: i23.ListItemLabelPipe, name: "esListItemLabel" }] }); }
116
+ 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=\"grid-card\"\n [class.grid-card-collection]=\"isCollection\"\n [class.grid-card-virtual]=\"$any(node).virtual\"\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 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 }}\"\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%}.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.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;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.25em;max-height:2.5em;-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.25em;max-height:2.5em;-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.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i9.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { 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.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }, { kind: "pipe", type: i23.ListItemLabelPipe, name: "esListItemLabel" }] }); }
117
117
  }
118
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
119
119
  type: Component,
120
- args: [{ selector: 'es-node-entries-card', template: "<div\n class=\"grid-card\"\n [class.grid-card-collection]=\"isCollection\"\n [class.grid-card-virtual]=\"$any(node).virtual\"\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 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=\"showRatings | async\">\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 }}\"\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 0 10px #0003;border-radius:var(--cardRoundness);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%}.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 5px;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 20px #0000004d;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.25em;max-height:2.5em;-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.25em;max-height:2.5em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
120
+ args: [{ selector: 'es-node-entries-card', template: "<div\n class=\"grid-card\"\n [class.grid-card-collection]=\"isCollection\"\n [class.grid-card-virtual]=\"$any(node).virtual\"\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 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 }}\"\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%}.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.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;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.25em;max-height:2.5em;-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.25em;max-height:2.5em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
121
121
  }], 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: [{
122
122
  type: Optional
123
123
  }] }]; }, propDecorators: { dropdown: [{
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
128
128
  }], node: [{
129
129
  type: Input
130
130
  }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3ZDLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFDVyxjQUFxQyxFQUNyQyxVQUE2QixFQUM3QixjQUE4QixFQUM5QixhQUE0QixFQUM1QixxQkFBNEMsRUFDNUMsZ0JBQTZDLEVBQzVDLHdCQUFrRCxFQUN0QyxLQUFZO1FBUHpCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTZCO1FBQzVDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDdEMsVUFBSyxHQUFMLEtBQUssQ0FBTztRQXJCM0Isb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFDbEMsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUNoQixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQiwyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQVF6RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBV3RDLENBQUM7SUFFSixXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxjQUFjLENBQUMsS0FBSztZQUNyRixDQUFDLENBQUMsTUFBTTtZQUNSLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUNELGFBQWE7UUFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUMvQyxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUNELHdDQUF3QztRQUN4QyxPQUFPLEVBQUUsQ0FBQztRQUNWLHlGQUF5RjtJQUM3RixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXlCO1FBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIscUZBQXFGO1lBQ3JGLHlFQUF5RTtZQUN6RSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDN0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNILENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUMxQyxLQUFLLENBQUMsTUFDVCxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsZ0RBQWdEO1FBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBTztRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNO1lBQ3hELENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQy9DLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDekMsQ0FBQyxDQUNULENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQTRCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixDQUN2RDtZQUNJLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSTtTQUNQLEVBQ0QsSUFBSSxDQUFDLElBQVksQ0FDcEIsQ0FBQztJQUNOLENBQUM7OEdBdkdRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZPQzdCckMsbWdNQXVLQTs7MkZEMUlhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDSSxzQkFBc0I7OzBCQTBCM0IsUUFBUTs0Q0FqQkosUUFBUTtzQkFBaEIsS0FBSztnQkFFb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUVmLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IENsaWNrU291cmNlLCBJbnRlcmFjdGlvblR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21GaWVsZFNwZWNpYWxUeXBlLCBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgQ29uZmlnU2VydmljZSwgTm9kZSwgUmVzdENvbnN0YW50cyB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgQ29sb3JIZWxwZXIsIFByZWZlcnJlZENvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2xvci1oZWxwZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWJzdHJhY3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtY2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVFbnRyaWVzQ2FyZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgcmVhZG9ubHkgSW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlO1xuICAgIHJlYWRvbmx5IFRhcmdldCA9IFRhcmdldDtcbiAgICByZWFkb25seSBDbGlja1NvdXJjZSA9IENsaWNrU291cmNlO1xuICAgIHJlYWRvbmx5IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUgPSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlO1xuICAgIEBJbnB1dCgpIGRyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ21lbnVUcmlnZ2VyJykgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgbm9kZTogVDtcbiAgICBkcm9wZG93bkxlZnQ6IG51bWJlcjtcbiAgICBkcm9wZG93blRvcDogbnVtYmVyO1xuICAgIHNob3dSYXRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgaXNDb2xsZWN0aW9uOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIG5vZGVIZWxwZXI6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdGVtcGxhdGVzU2VydmljZTogTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0OiBUb2FzdCxcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDb2xsZWN0aW9uID0gdGhpcy5ub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24oY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIENvbG9ySGVscGVyLmdldFByZWZlcnJlZENvbG9yKHRoaXMubm9kZS5jb2xsZWN0aW9uLmNvbG9yKSA9PT0gUHJlZmVycmVkQ29sb3IuQmxhY2tcbiAgICAgICAgICAgID8gJyMwMDAnXG4gICAgICAgICAgICA6ICcjZmZmJztcbiAgICB9XG4gICAgb3B0aW9uc09uQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9uc1tUYXJnZXQuTGlzdF07XG4gICAgICAgIGNvbnN0IGFsd2F5cyA9IG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBbHdheXMpO1xuICAgICAgICBpZiAoYWx3YXlzLnNvbWUoKG8pID0+IG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWx3YXlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGRvIE5PVCBzaG93IGFueSBhZGRpdGlvbmFsIGFjdGlvbnNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAvLyByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG8pID0+IG8uc2hvd0FzQWN0aW9uICYmIG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpLnNsaWNlKDAsIDMpO1xuICAgIH1cblxuICAgIG9wZW5Db250ZXh0bWVudShldmVudDogTW91c2VFdmVudCB8IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgICAgIC8vIENhbGwgYHByZXZlbnREZWZhdWx0KClgIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBtZW51LCBzbyB3ZSBjYW4gdXNlIGBjZGtEcmFnYCB3aXRoIGFcbiAgICAgICAgICAgIC8vIHN0YXJ0IGRlbGF5IHdpdGhvdXQgYmVpbmcgaW50ZXJydXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGxvbmctdGFwIGFjdGlvbi5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAoeyBjbGllbnRYOiB0aGlzLmRyb3Bkb3duTGVmdCwgY2xpZW50WTogdGhpcy5kcm9wZG93blRvcCB9ID0gZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHsgeDogdGhpcy5kcm9wZG93bkxlZnQsIHk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IChcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQuaW5jbHVkZXModGhpcy5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBtZW51IHRvIHJlZmxlY3QgY2hhbmdlZCBvcHRpb25zLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmNhblNob3dEcm9wZG93bigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdOT19BVkFJTEFCTEVfT1BUSU9OUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucz8uZmlsdGVyKChjKSA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5NZW51KG5vZGU6IFQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zaG93UmF0aW5ncy5uZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmhhc1Rvb2xwZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShuYW1lOiBDdXN0b21GaWVsZFNwZWNpYWxUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21GaWVsZFRlbXBsYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOT0RFJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMubm9kZSBhcyBOb2RlLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJncmlkLWNhcmRcIlxuICBbY2xhc3MuZ3JpZC1jYXJkLWNvbGxlY3Rpb25dPVwiaXNDb2xsZWN0aW9uXCJcbiAgW2NsYXNzLmdyaWQtY2FyZC12aXJ0dWFsXT1cIiRhbnkobm9kZSkudmlydHVhbFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICBbY2xhc3MuZHluYW1pYy1zaW5nbGUtY2xpY2tdPVwiZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID09PSAnZHluYW1pYydcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudClcIlxuICAoa2V5ZG93bi5Db250ZXh0TWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheVwiXG4gICAgY2xhc3M9XCJjYXJkLW92ZXJsYXlcIlxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmNsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5PdmVybGF5XG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwic2hvd1JhdGluZ3MgfCBhc3luY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH1cIlxuICAgICAgICBkYXRhLXRlc3Q9XCJjYXJkLW9wdGlvbnMtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2ltYWdlIGxldC1wbGF5QW5pbWF0aW9uPVwicGxheUFuaW1hdGlvblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1pbWFnZS1hcmVhXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpIGFzIHJlZlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmOyBjb250ZXh0OiB7IG5vZGU6IHRoaXMubm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KVwiPlxuICAgICAgICA8ZXMtcHJldmlldy1pbWFnZVxuICAgICAgICAgICpuZ0lmPVwiIShpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvbilcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIFtwbGF5QW5pbWF0aW9uXT1cInBsYXlBbmltYXRpb25cIlxuICAgICAgICA+PC9lcy1wcmV2aWV3LWltYWdlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb25cIiBjbGFzcz1cImNhcmQtY29sbGVjdGlvbi1pbWFnZVwiPlxuICAgICAgICAgIDxpIGVzSWNvbj1cImxheWVyc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtZXRhIGxldC1saW5rPVwibGlua1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1ldGFcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc3BsYXlQYXJ0IG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW1ldGEtcm93IGNhcmQtbWV0YS1yb3cte3sgZGlzcGxheVBhcnQubmFtZSB8IGxvd2VyY2FzZSB9fVwiXG4gICAgICAgIFtjbGFzcy5jYXJkLW1ldGEtcm93LXByaW1hcnldPVwiZmlyc3RcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RcIj5cbiAgICAgICAgICA8ZXMtbm9kZS11cmxcbiAgICAgICAgICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgI2xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9lcy1ub2RlLXVybD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCI+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgZGlzcGxheVBhcnQgfCBlc0xpc3RJdGVtTGFiZWwgfCBhc3luYyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3ZDLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFDVyxjQUFxQyxFQUNyQyxVQUE2QixFQUM3QixjQUE4QixFQUM5QixhQUE0QixFQUM1QixxQkFBNEMsRUFDNUMsZ0JBQTZDLEVBQzVDLHdCQUFrRCxFQUN0QyxLQUFZO1FBUHpCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTZCO1FBQzVDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDdEMsVUFBSyxHQUFMLEtBQUssQ0FBTztRQXJCM0Isb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFDbEMsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUNoQixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQiwyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQVF6RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBV3RDLENBQUM7SUFFSixXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxjQUFjLENBQUMsS0FBSztZQUNyRixDQUFDLENBQUMsTUFBTTtZQUNSLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUNELGFBQWE7UUFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUMvQyxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUNELHdDQUF3QztRQUN4QyxPQUFPLEVBQUUsQ0FBQztRQUNWLHlGQUF5RjtJQUM3RixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXlCO1FBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIscUZBQXFGO1lBQ3JGLHlFQUF5RTtZQUN6RSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDN0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNILENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUMxQyxLQUFLLENBQUMsTUFDVCxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsZ0RBQWdEO1FBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBTztRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNO1lBQ3hELENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQy9DLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDekMsQ0FBQyxDQUNULENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQTRCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixDQUN2RDtZQUNJLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSTtTQUNQLEVBQ0QsSUFBSSxDQUFDLElBQVksQ0FDcEIsQ0FBQztJQUNOLENBQUM7OEdBdkdRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZPQzdCckMscWhNQXVLQTs7MkZEMUlhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDSSxzQkFBc0I7OzBCQTBCM0IsUUFBUTs0Q0FqQkosUUFBUTtzQkFBaEIsS0FBSztnQkFFb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUVmLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IENsaWNrU291cmNlLCBJbnRlcmFjdGlvblR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21GaWVsZFNwZWNpYWxUeXBlLCBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgQ29uZmlnU2VydmljZSwgTm9kZSwgUmVzdENvbnN0YW50cyB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgQ29sb3JIZWxwZXIsIFByZWZlcnJlZENvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2xvci1oZWxwZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWJzdHJhY3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtY2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVFbnRyaWVzQ2FyZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgcmVhZG9ubHkgSW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlO1xuICAgIHJlYWRvbmx5IFRhcmdldCA9IFRhcmdldDtcbiAgICByZWFkb25seSBDbGlja1NvdXJjZSA9IENsaWNrU291cmNlO1xuICAgIHJlYWRvbmx5IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUgPSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlO1xuICAgIEBJbnB1dCgpIGRyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ21lbnVUcmlnZ2VyJykgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgbm9kZTogVDtcbiAgICBkcm9wZG93bkxlZnQ6IG51bWJlcjtcbiAgICBkcm9wZG93blRvcDogbnVtYmVyO1xuICAgIHNob3dSYXRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgaXNDb2xsZWN0aW9uOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIG5vZGVIZWxwZXI6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdGVtcGxhdGVzU2VydmljZTogTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0OiBUb2FzdCxcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDb2xsZWN0aW9uID0gdGhpcy5ub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24oY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIENvbG9ySGVscGVyLmdldFByZWZlcnJlZENvbG9yKHRoaXMubm9kZS5jb2xsZWN0aW9uLmNvbG9yKSA9PT0gUHJlZmVycmVkQ29sb3IuQmxhY2tcbiAgICAgICAgICAgID8gJyMwMDAnXG4gICAgICAgICAgICA6ICcjZmZmJztcbiAgICB9XG4gICAgb3B0aW9uc09uQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9uc1tUYXJnZXQuTGlzdF07XG4gICAgICAgIGNvbnN0IGFsd2F5cyA9IG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBbHdheXMpO1xuICAgICAgICBpZiAoYWx3YXlzLnNvbWUoKG8pID0+IG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWx3YXlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGRvIE5PVCBzaG93IGFueSBhZGRpdGlvbmFsIGFjdGlvbnNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAvLyByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG8pID0+IG8uc2hvd0FzQWN0aW9uICYmIG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpLnNsaWNlKDAsIDMpO1xuICAgIH1cblxuICAgIG9wZW5Db250ZXh0bWVudShldmVudDogTW91c2VFdmVudCB8IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgICAgIC8vIENhbGwgYHByZXZlbnREZWZhdWx0KClgIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBtZW51LCBzbyB3ZSBjYW4gdXNlIGBjZGtEcmFnYCB3aXRoIGFcbiAgICAgICAgICAgIC8vIHN0YXJ0IGRlbGF5IHdpdGhvdXQgYmVpbmcgaW50ZXJydXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGxvbmctdGFwIGFjdGlvbi5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAoeyBjbGllbnRYOiB0aGlzLmRyb3Bkb3duTGVmdCwgY2xpZW50WTogdGhpcy5kcm9wZG93blRvcCB9ID0gZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHsgeDogdGhpcy5kcm9wZG93bkxlZnQsIHk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IChcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQuaW5jbHVkZXModGhpcy5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBtZW51IHRvIHJlZmxlY3QgY2hhbmdlZCBvcHRpb25zLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmNhblNob3dEcm9wZG93bigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdOT19BVkFJTEFCTEVfT1BUSU9OUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucz8uZmlsdGVyKChjKSA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5NZW51KG5vZGU6IFQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zaG93UmF0aW5ncy5uZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmhhc1Rvb2xwZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShuYW1lOiBDdXN0b21GaWVsZFNwZWNpYWxUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21GaWVsZFRlbXBsYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOT0RFJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMubm9kZSBhcyBOb2RlLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJncmlkLWNhcmRcIlxuICBbY2xhc3MuZ3JpZC1jYXJkLWNvbGxlY3Rpb25dPVwiaXNDb2xsZWN0aW9uXCJcbiAgW2NsYXNzLmdyaWQtY2FyZC12aXJ0dWFsXT1cIiRhbnkobm9kZSkudmlydHVhbFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICBbY2xhc3MuZHluYW1pYy1zaW5nbGUtY2xpY2tdPVwiZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID09PSAnZHluYW1pYydcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudClcIlxuICAoa2V5ZG93bi5Db250ZXh0TWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheVwiXG4gICAgY2xhc3M9XCJjYXJkLW92ZXJsYXlcIlxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmNsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5PdmVybGF5XG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucyB8fCBzaG93UmF0aW5nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH1cIlxuICAgICAgICBkYXRhLXRlc3Q9XCJjYXJkLW9wdGlvbnMtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2ltYWdlIGxldC1wbGF5QW5pbWF0aW9uPVwicGxheUFuaW1hdGlvblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1pbWFnZS1hcmVhXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpIGFzIHJlZlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmOyBjb250ZXh0OiB7IG5vZGU6IHRoaXMubm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KVwiPlxuICAgICAgICA8ZXMtcHJldmlldy1pbWFnZVxuICAgICAgICAgICpuZ0lmPVwiIShpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvbilcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIFtwbGF5QW5pbWF0aW9uXT1cInBsYXlBbmltYXRpb25cIlxuICAgICAgICA+PC9lcy1wcmV2aWV3LWltYWdlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb25cIiBjbGFzcz1cImNhcmQtY29sbGVjdGlvbi1pbWFnZVwiPlxuICAgICAgICAgIDxpIGVzSWNvbj1cImxheWVyc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtZXRhIGxldC1saW5rPVwibGlua1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1ldGFcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc3BsYXlQYXJ0IG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW1ldGEtcm93IGNhcmQtbWV0YS1yb3cte3sgZGlzcGxheVBhcnQubmFtZSB8IGxvd2VyY2FzZSB9fVwiXG4gICAgICAgIFtjbGFzcy5jYXJkLW1ldGEtcm93LXByaW1hcnldPVwiZmlyc3RcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RcIj5cbiAgICAgICAgICA8ZXMtbm9kZS11cmxcbiAgICAgICAgICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgI2xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9lcy1ub2RlLXVybD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCI+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgZGlzcGxheVBhcnQgfCBlc0xpc3RJdGVtTGFiZWwgfCBhc3luYyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -281,11 +281,11 @@ export class NodeEntriesCardGridComponent {
281
281
  return this.entriesService.dataSource instanceof CustomTemplatesDataSource;
282
282
  }
283
283
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardGridComponent, deps: [{ token: i1.NodeEntriesService }, { token: i2.NodeEntriesGlobalService }, { token: i3.NodeEntriesTemplatesService }, { token: i4.UIService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
284
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: { displayType: "displayType" }, viewQueries: [{ propertyName: "gridTop", first: true, predicate: ["gridTop"], descendants: true, static: true }, { propertyName: "sortPanel", first: true, predicate: SortSelectPanelComponent, descendants: true }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "dropListsQuery", predicate: CdkDropList, descendants: true }, { propertyName: "itemRefs", predicate: ["item"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-template #gridTop>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container *ngIf=\"(nodes$ | async)?.length > 0 || entriesService.globalOptions?.length > 0\">\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"entriesService.globalOptions?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate()\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 20px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:30px;grid-row-gap:30px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,rgba(255,255,255,.0001) 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i7.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i8.SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: i9.DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: i10.BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: ["esBorderBoxObserver"], exportAs: ["borderBoxObserver"] }, { kind: "component", type: i11.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: i11.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i12.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i13.NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: ["dropdown", "node"] }, { kind: "component", type: i14.NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: ["node"] }, { kind: "component", type: i15.SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: ["active", "direction", "columns", "customSortingInProgress"], outputs: ["sortChange", "customSortingInProgressChange"] }, { kind: "directive", type: i16.NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: i17.NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: i18.NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i19.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
284
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: { displayType: "displayType" }, viewQueries: [{ propertyName: "gridTop", first: true, predicate: ["gridTop"], descendants: true, static: true }, { propertyName: "sortPanel", first: true, predicate: SortSelectPanelComponent, descendants: true }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "dropListsQuery", predicate: CdkDropList, descendants: true }, { propertyName: "itemRefs", predicate: ["item"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-template #gridTop>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container *ngIf=\"(nodes$ | async)?.length > 0 || entriesService.globalOptions?.length > 0\">\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"entriesService.globalOptions?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate()\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 25px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:20px;grid-row-gap:20px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,rgba(255,255,255,.0001) 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i7.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i8.SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: i9.DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: i10.BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: ["esBorderBoxObserver"], exportAs: ["borderBoxObserver"] }, { kind: "component", type: i11.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: i11.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i12.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i13.NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: ["dropdown", "node"] }, { kind: "component", type: i14.NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: ["node"] }, { kind: "component", type: i15.SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: ["active", "direction", "columns", "customSortingInProgress"], outputs: ["sortChange", "customSortingInProgressChange"] }, { kind: "directive", type: i16.NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: i17.NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: i18.NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i19.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
285
285
  }
286
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardGridComponent, decorators: [{
287
287
  type: Component,
288
- args: [{ selector: 'es-node-entries-card-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #gridTop>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container *ngIf=\"(nodes$ | async)?.length > 0 || entriesService.globalOptions?.length > 0\">\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"entriesService.globalOptions?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate()\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 20px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:30px;grid-row-gap:30px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,rgba(255,255,255,.0001) 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"] }]
288
+ args: [{ selector: 'es-node-entries-card-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #gridTop>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container *ngIf=\"(nodes$ | async)?.length > 0 || entriesService.globalOptions?.length > 0\">\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"entriesService.globalOptions?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate()\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!getDragEnabled()\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 25px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,rgba(255,255,255,.000001) 0,rgb(255,255,255) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:20px;grid-row-gap:20px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,rgba(255,255,255,.0001) 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"] }]
289
289
  }], ctorParameters: function () { return [{ type: i1.NodeEntriesService }, { type: i2.NodeEntriesGlobalService }, { type: i3.NodeEntriesTemplatesService }, { type: i4.UIService }, { type: i0.NgZone }]; }, propDecorators: { gridTop: [{
290
290
  type: ViewChild,
291
291
  args: ['gridTop', { static: true }]
@@ -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=\"grid-card\"\n [class.grid-card-collection]=\"nodeHelper.isNodeCollection(node)\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\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 <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 0 10px #0003;border-radius:var(--cardRoundness);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%}.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:130px;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 5px;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 20px #0000004d;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.25em;max-height:2.5em;-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 .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.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i6.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { 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=\"grid-card\"\n [class.grid-card-collection]=\"nodeHelper.isNodeCollection(node)\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\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 <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%}.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.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;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.25em;max-height:2.5em;-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 .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.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i6.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { 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=\"grid-card\"\n [class.grid-card-collection]=\"nodeHelper.isNodeCollection(node)\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\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 <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 0 10px #0003;border-radius:var(--cardRoundness);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%}.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:130px;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 5px;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 20px #0000004d;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.25em;max-height:2.5em;-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 .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=\"grid-card\"\n [class.grid-card-collection]=\"nodeHelper.isNodeCollection(node)\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\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 <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%}.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.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;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.25em;max-height:2.5em;-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 .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
  }] } });