ngx-edu-sharing-ui 9999.0.2 → 9999.0.4
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.
- package/esm2022/lib/actionbar/actionbar.component.mjs +31 -16
- package/esm2022/lib/directives/icon.directive.mjs +24 -7
- package/esm2022/lib/dropdown/dropdown.component.mjs +15 -8
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +3 -3
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
- package/esm2022/lib/node-entries/entries-model.mjs +1 -1
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +6 -4
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +16 -13
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +2 -2
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +5 -3
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +8 -3
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +7 -5
- package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
- package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
- package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
- package/esm2022/lib/services/node-entries.service.mjs +1 -1
- package/esm2022/lib/services/node-helper.service.mjs +5 -2
- package/esm2022/lib/services/options-helper-data.service.mjs +2 -2
- package/esm2022/lib/services/search-helper.service.mjs +52 -0
- package/esm2022/lib/services/ui.service.mjs +16 -1
- package/esm2022/lib/translations/translation-loader.mjs +7 -6
- package/esm2022/lib/translations/translations.service.mjs +14 -4
- package/esm2022/lib/types/option-item.mjs +6 -1
- package/esm2022/module.mjs +2 -1
- package/fesm2022/ngx-edu-sharing-ui.mjs +214 -74
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/actionbar/actionbar.component.d.ts +13 -3
- package/lib/directives/icon.directive.d.ts +5 -3
- package/lib/dropdown/dropdown.component.d.ts +6 -3
- package/lib/list-items/list-text/list-text.component.d.ts +3 -3
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/node-entries/entries-model.d.ts +1 -1
- package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +1 -1
- package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +1 -1
- package/lib/node-entries/option-button/option-button.component.d.ts +2 -1
- package/lib/pipes/node-title.pipe.d.ts +2 -1
- package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
- package/lib/services/abstract/options-helper.service.d.ts +1 -1
- package/lib/services/node-helper.service.d.ts +2 -2
- package/lib/services/options-helper-data.service.d.ts +3 -3
- package/lib/services/search-helper.service.d.ts +21 -0
- package/lib/services/ui.service.d.ts +7 -1
- package/lib/translations/translations.service.d.ts +5 -2
- package/lib/types/option-item.d.ts +7 -2
- package/module.d.ts +1 -0
- package/package.json +1 -1
package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs
CHANGED
|
@@ -209,14 +209,17 @@ export class NodeEntriesCardGridComponent {
|
|
|
209
209
|
.concat(new ListItemSort('NODE', 'score'), new ListItemSort('NODE', RestConstants.CCM_PROP_COLLECTION_ORDERED_POSITION), new ListItemSort('NODE', RestConstants.CM_PROP_TITLE), new ListItemSort('NODE', RestConstants.CM_NAME), new ListItemSort('NODE', RestConstants.CM_PROP_C_CREATED), new ListItemSort('NODE', RestConstants.CM_MODIFIED_DATE), new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONMODIFIED), new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCETIMESTAMP))
|
|
210
210
|
.some((c2) => c.type === c2.type && c2.name === c.name);
|
|
211
211
|
if (!result && !this.entriesService.configureColumns) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
212
|
+
return this.entriesService.sort?.columns;
|
|
213
|
+
/*
|
|
214
|
+
const warning =
|
|
215
|
+
'Sort field ' +
|
|
216
|
+
c.name +
|
|
217
|
+
' was specified but is not present as a column. ' +
|
|
218
|
+
'It will be ignored. Please also configure this field in the <lists> section';
|
|
219
|
+
if (!displayedWarnings.includes(warning)) {
|
|
220
|
+
console.warn(warning);
|
|
221
|
+
displayedWarnings.push(warning);
|
|
222
|
+
}*/
|
|
220
223
|
}
|
|
221
224
|
return result;
|
|
222
225
|
});
|
|
@@ -283,18 +286,18 @@ export class NodeEntriesCardGridComponent {
|
|
|
283
286
|
behavior: 'smooth',
|
|
284
287
|
});
|
|
285
288
|
}
|
|
286
|
-
isCustomTemplate() {
|
|
287
|
-
return this.entriesService.dataSource instanceof CustomTemplatesDataSource;
|
|
289
|
+
isCustomTemplate(node) {
|
|
290
|
+
return this.entriesService.dataSource instanceof CustomTemplatesDataSource || (node.elementRef);
|
|
288
291
|
}
|
|
289
292
|
isBlocked(node) {
|
|
290
293
|
return node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true';
|
|
291
294
|
}
|
|
292
295
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardGridComponent, deps: [{ token: i1.NodeEntriesService }, { token: i2.NodeEntriesGlobalService }, { token: i3.NodeEntriesTemplatesService }, { token: i4.UIService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
293
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: { displayType: "displayType" }, host: { properties: { "style.--scroll-gradient-color": "this.scrollGradientColor" } }, viewQueries: [{ propertyName: "columnChooserTrigger", first: true, predicate: ["columnChooserTrigger"], descendants: true }, { 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 <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\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<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\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\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\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.globalOptionsSubject | async)?.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() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\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() | async)\"\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)}}:host{--scroll-gradient-color: white}.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;-moz-user-select:none;-ms-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,transparent 0,var(--scroll-gradient-color) 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,transparent 0,var(--scroll-gradient-color) 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-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.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%,#fff0 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.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i7.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: i7.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i7.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: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i8.BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: ["esBorderBoxObserver"], exportAs: ["borderBoxObserver"] }, { kind: "component", type: i9.DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: i10.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i11.InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollThrottle", "scrollWindow"], outputs: ["scrolled"] }, { kind: "component", type: i12.SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i15.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i16.ColumnChooserComponent, selector: "es-column-chooser", inputs: ["origin", "columnChooserVisible", "columns"], outputs: ["columnChooserVisibleChange", "columnsChange"] }, { kind: "component", type: i17.NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: ["dropdown", "node"] }, { kind: "component", type: i18.NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: ["node"] }, { kind: "component", type: i19.SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: ["active", "direction", "columns", "customSortingInProgress"], outputs: ["sortChange", "customSortingInProgressChange"] }, { kind: "directive", type: i20.NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: i21.NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: i22.NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
296
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: { displayType: "displayType" }, host: { properties: { "style.--scroll-gradient-color": "this.scrollGradientColor" } }, viewQueries: [{ propertyName: "columnChooserTrigger", first: true, predicate: ["columnChooserTrigger"], descendants: true }, { 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 <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\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<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\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\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\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.globalOptionsSubject | async)?.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(node)\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate(node)\">\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() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\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() | async)\"\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)}}:host{--scroll-gradient-color: white}.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;-moz-user-select:none;-ms-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,transparent 0,var(--scroll-gradient-color) 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,transparent 0,var(--scroll-gradient-color) 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-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.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%,#fff0 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.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i7.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: i7.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i7.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: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i8.BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: ["esBorderBoxObserver"], exportAs: ["borderBoxObserver"] }, { kind: "component", type: i9.DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: i10.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i11.InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollThrottle", "scrollWindow"], outputs: ["scrolled"] }, { kind: "component", type: i12.SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i15.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i16.ColumnChooserComponent, selector: "es-column-chooser", inputs: ["origin", "columnChooserVisible", "columns"], outputs: ["columnChooserVisibleChange", "columnsChange"] }, { kind: "component", type: i17.NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: ["dropdown", "node"] }, { kind: "component", type: i18.NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: ["node"] }, { kind: "component", type: i19.SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: ["active", "direction", "columns", "customSortingInProgress"], outputs: ["sortChange", "customSortingInProgressChange"] }, { kind: "directive", type: i20.NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: i21.NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: i22.NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
294
297
|
}
|
|
295
298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardGridComponent, decorators: [{
|
|
296
299
|
type: Component,
|
|
297
|
-
args: [{ selector: 'es-node-entries-card-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\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<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\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\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\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.globalOptionsSubject | async)?.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() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\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() | async)\"\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)}}:host{--scroll-gradient-color: white}.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;-moz-user-select:none;-ms-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,transparent 0,var(--scroll-gradient-color) 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,transparent 0,var(--scroll-gradient-color) 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-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.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%,#fff0 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"] }]
|
|
300
|
+
args: [{ selector: 'es-node-entries-card-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\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<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\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\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\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.globalOptionsSubject | async)?.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(node)\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate(node)\">\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() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\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() | async)\"\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)}}:host{--scroll-gradient-color: white}.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;-moz-user-select:none;-ms-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,transparent 0,var(--scroll-gradient-color) 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,transparent 0,var(--scroll-gradient-color) 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-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.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%,#fff0 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"] }]
|
|
298
301
|
}], ctorParameters: () => [{ type: i1.NodeEntriesService }, { type: i2.NodeEntriesGlobalService }, { type: i3.NodeEntriesTemplatesService }, { type: i4.UIService }, { type: i0.NgZone }], propDecorators: { columnChooserTrigger: [{
|
|
299
302
|
type: ViewChild,
|
|
300
303
|
args: ['columnChooserTrigger']
|
|
@@ -319,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
319
322
|
type: HostBinding,
|
|
320
323
|
args: ['style.--scroll-gradient-color']
|
|
321
324
|
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWVudHJpZXMtY2FyZC1ncmlkL25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC9ub2RlLWVudHJpZXMtY2FyZC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBUSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFjLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUseUJBQXlCLEVBQUUs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UUFBUSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLFlBQVkseUJBQXlCLENBQUM7SUFDL0UsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDO0lBQ3BGLENBQUM7OEdBM1VRLDRCQUE0QjtrR0FBNUIsNEJBQTRCLDZiQWMxQix3QkFBd0Isc0pBUXJCLFdBQVcsaUdBRUssVUFBVSw2QkNsRTVDLDQ3UUFpT0E7OzJGRHZMYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0ksMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNO3FOQVlaLG9CQUFvQjtzQkFBdEQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBQ1csT0FBTztzQkFBbEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsQyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsd0JBQXdCO2dCQVFSLGNBQWM7c0JBQXhDLFlBQVk7dUJBQUMsV0FBVztnQkFDTixPQUFPO3NCQUF6QixTQUFTO3VCQUFDLE1BQU07Z0JBQzJCLFFBQVE7c0JBQW5ELFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDakMsV0FBVztzQkFBbkIsS0FBSztnQkEyQndDLG1CQUFtQjtzQkFBaEUsV0FBVzt1QkFBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRW50ZXIsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR3JpZExheW91dCwgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgSXRlbXNDYXAgfSBmcm9tICcuLi9pdGVtcy1jYXAnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9zb3J0LXNlbGVjdC1wYW5lbC9zb3J0LXNlbGVjdC1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzRGF0YVNvdXJjZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMtZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBMaXN0SXRlbVNvcnQgfSBmcm9tICcuLi8uLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRHJhZ0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcblxubGV0IGRpc3BsYXllZFdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy1jYXJkLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDYXJkR3JpZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcmVhZG9ubHkgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSA9IE5vZGVFbnRyaWVzRGlzcGxheVR5cGU7XG4gICAgcmVhZG9ubHkgVGFyZ2V0ID0gVGFyZ2V0O1xuICAgIC8qKlxuICAgICAqIHJlbGF0aXZlIHNjcm9sbGluZyB3aGVuIGEgc2Nyb2xsaW5nIGFycm93IChsZWZ0IG9yIHJpZ2h0KSBpcyB1c2VkXG4gICAgICogYSB2YWx1ZSBvZiAxIHdvdWxkIG1lYW4gdG8gc2Nyb2xsIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBlbnRpcmUgY29udGVudFxuICAgICAqL1xuICAgIHJlYWRvbmx5IFNjcm9sbGluZ09mZnNldFBlcmNlbnRhZ2UgPSAwLjQ7XG5cbiAgICBjb2x1bW5DaG9vc2VyVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBAVmlld0NoaWxkKCdjb2x1bW5DaG9vc2VyVHJpZ2dlcicpIGNvbHVtbkNob29zZXJUcmlnZ2VyOiBDZGtPdmVybGF5T3JpZ2luO1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRUb3AnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZXQgZ3JpZFRvcCh2YWx1ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckdyaWRUb3AodmFsdWUpO1xuICAgIH1cbiAgICBAVmlld0NoaWxkKFNvcnRTZWxlY3RQYW5lbENvbXBvbmVudClcbiAgICBzZXQgc29ydFBhbmVsKHZhbHVlOiBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQpIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlUmVtb3RlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBhcyBhbnkpLnNvcnRQYW5lbCA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBAVmlld0NoaWxkcmVuKENka0Ryb3BMaXN0KSBkcm9wTGlzdHNRdWVyeTogUXVlcnlMaXN0PENka0Ryb3BMaXN0PjtcbiAgICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdpdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGl0ZW1SZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlOiBOb2RlRW50cmllc0Rpc3BsYXlUeXBlO1xuXG4gICAgaXNEcmFnZ2luZyA9IGZhbHNlOyAvLyBEcmFnLWFuZC1kcm9wLCBub3QgcmVhcnJhbmdlXG4gICAgZHJvcExpc3RzOiBDZGtEcm9wTGlzdFtdO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzaG93biBpdGVtcyBpcyBsaW1pdGVkIGJ5IGBncmlkQ29uZmlnLm1heFJvd3NgLlxuICAgICAqXG4gICAgICogQSB2YWx1ZSBvZiBgdHJ1ZWAgZG9lcyBub3QgbWVhbiwgdGhhdCB0aGVyZSB3b3VsZCBiZSBtb3JlIGl0ZW1zIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICB2aXNpYmxlSXRlbXNMaW1pdGVkID0gZmFsc2U7XG4gICAgbGF5b3V0OiBHcmlkTGF5b3V0O1xuICAgIC8qKlxuICAgICAqIHVwZGF0ZXMgdmlhIGJveE9ic2VydmVyXG4gICAgICogYW5kIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBpZiBzY3JvbGxpbmcgaW4gdGhlIGRpcmVjdGlvbiBpcyBjdXJyZW50bHkgZmVhc2libGVcbiAgICAgKi9cbiAgICBzY3JvbGwgPSB7XG4gICAgICAgIGxlZnQ6IGZhbHNlLFxuICAgICAgICByaWdodDogZmFsc2UsXG4gICAgfTtcblxuICAgIHJlYWRvbmx5IG5vZGVzJDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heFJvd3MkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0JDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zUGVyUm93U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gICAgcmVhZG9ubHkgaXRlbXNDYXAgPSBuZXcgSXRlbXNDYXA8VD4oKTtcbiAgICBwcml2YXRlIGdsb2JhbEN1cnNvclN0eWxlOiBIVE1MU3R5bGVFbGVtZW50O1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tc2Nyb2xsLWdyYWRpZW50LWNvbG9yJykgc2Nyb2xsR3JhZGllbnRDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzU2VydmljZTogTm9kZUVudHJpZXNTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgZW50cmllc0dsb2JhbFNlcnZpY2U6IE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHVibGljIHVpOiBVSVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubm9kZXMkID0gdGhpcy5lbnRyaWVzU2VydmljZS5kYXRhU291cmNlJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChkYXRhU291cmNlKSA9PiBkYXRhU291cmNlPy5jb25uZWN0KCkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1heFJvd3MkID0gdGhpcy5lbnRyaWVzU2VydmljZS5ncmlkQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgbWFwKChncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnPy5tYXhSb3dzIHx8IG51bGwpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sYXlvdXQkID0gdGhpcy5lbnRyaWVzU2VydmljZS5ncmlkQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgbWFwKChncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnPy5sYXlvdXQgfHwgJ2dyaWQnKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KCgpID0+ICh0aGlzLnNjcm9sbEdyYWRpZW50Q29sb3IgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLnNjcm9sbEdyYWRpZW50Q29sb3IoKSkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdGVySXRlbXNDYXAoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckxheW91dCgpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaWJsZUl0ZW1zTGltaXRlZCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckdyaWRUb3AoZ3JpZFRvcDogVGVtcGxhdGVSZWY8dW5rbm93bj4pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlciA9IGdyaWRUb3A7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVzU2VydmljZS5lbnRyaWVzVG9wTWF0dGVyID09PSBncmlkVG9wKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5lbnRyaWVzVG9wTWF0dGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3Rlckl0ZW1zQ2FwKCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YVNvdXJjZSkgPT4gKGRhdGFTb3VyY2UuaXRlbXNDYXAgPSB0aGlzLml0ZW1zQ2FwKSk7XG4gICAgICAgIHJ4anMuY29tYmluZUxhdGVzdChbdGhpcy5pdGVtc1BlclJvd1N1YmplY3QucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSwgdGhpcy5tYXhSb3dzJF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtpdGVtc1BlclJvdywgbWF4Um93c10pID0+XG4gICAgICAgICAgICAgICAgICAgIG1heFJvd3MgPiAwICYmIGl0ZW1zUGVyUm93ICE9PSBudWxsID8gaXRlbXNQZXJSb3cgKiBtYXhSb3dzIDogbnVsbCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2FwKSA9PiAodGhpcy5pdGVtc0NhcC5jYXAgPSBjYXApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGF5b3V0KCkge1xuICAgICAgICB0aGlzLmxheW91dCQuc3Vic2NyaWJlKChsYXlvdXQpID0+ICh0aGlzLmxheW91dCA9IGxheW91dCkpO1xuICAgIH1cblxuICAgIG9uU29ydENoYW5nZShzb3J0OiBTb3J0KSB7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydC5hY3RpdmUgPSBzb3J0LmFjdGl2ZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0LmRpcmVjdGlvbiA9IHNvcnQuZGlyZWN0aW9uO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQpO1xuICAgIH1cblxuICAgIGxvYWREYXRhKHNvdXJjZTogJ3Njcm9sbCcgfCAnYnV0dG9uJykge1xuICAgICAgICAvLyBAVE9ETzogTWF5YmUgdGhpcyBpcyBiZXR0ZXIgaGFuZGxlZCBpbiBhIG1vcmUgY2VudHJhbGVkIHNlcnZpY2VcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgZm9vdGVyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb290ZXInKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMuaXRlbSgwKS5pbm5lckhUTUwudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvdWxkTG9hZE1vcmUgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLmxvYWRNb3JlKHNvdXJjZSk7XG4gICAgICAgIGlmIChjb3VsZExvYWRNb3JlICYmIHNvdXJjZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdE5ld0l0ZW1XaGVuTG9hZGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkN1c3RvbVNvcnRpbmdJblByb2dyZXNzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERyb3BMaXN0cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdFbnRlcmVkKCRldmVudDogQ2RrRHJhZ0VudGVyKSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICAkZXZlbnQuaXRlbS5kYXRhLFxuICAgICAgICAgICAgJGV2ZW50LmNvbnRhaW5lci5kYXRhLFxuICAgICAgICApO1xuICAgICAgICAvLyBgQ2RrRHJhZ2AgZG9lc24ndCByZWFsbHkgd2FudCB1cyB0byByZWFycmFuZ2UgdGhlIGl0ZW1zIHdoaWxlIGRyYWdnaW5nLiBJdHMgY2FjaGVkXG4gICAgICAgIC8vIGVsZW1lbnQgcG9zaXRpb25zIGdldCBvdXQgb2Ygc3luYyB1bmxlc3Mgd2UgdXBkYXRlIHRoZW0gbWFudWFsbHkuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wTGlzdHM/LmZvckVhY2goKGxpc3QpID0+IChsaXN0Ll9kcm9wTGlzdFJlZiBhcyBhbnkpWydfY2FjaGVJdGVtcyddKCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdTdGFydGVkKCkge1xuICAgICAgICB0aGlzLmdsb2JhbEN1cnNvclN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmdsb2JhbEN1cnNvclN0eWxlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZS5pbm5lckhUTUwgPSBgKiB7Y3Vyc29yOiBncmFiYmluZyAhaW1wb3J0YW50OyB9YDtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdFbmRlZCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmdsb2JhbEN1cnNvclN0eWxlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ1N0YXJ0RGVsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMudWkuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDUwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclZpc2libGVJdGVtc0xpbWl0ZWQoKSB7XG4gICAgICAgIHRoaXMubWF4Um93cyQuc3Vic2NyaWJlKChtYXhSb3dzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVJdGVtc0xpbWl0ZWQgPSBtYXhSb3dzID4gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoRHJvcExpc3RzKCkge1xuICAgICAgICB0aGlzLmRyb3BMaXN0cyA9IHRoaXMuZHJvcExpc3RzUXVlcnkudG9BcnJheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNGaXJzdE5ld0l0ZW1XaGVuTG9hZGVkKCkge1xuICAgICAgICBjb25zdCBvbGRMZW5ndGggPSB0aGlzLml0ZW1SZWZzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5pdGVtUmVmcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE5vZGVFbnRyaWVzQ2FyZEdyaWRDb21wb25lbnQ8VD5bJ2l0ZW1SZWZzJ10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gb2xkTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbmNlKGl0ZW1zLmdldChvbGRMZW5ndGgpLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNPbmNlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgb25HcmlkU2l6ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUm93ID0gdGhpcy5nZXRJdGVtc1BlclJvdygpO1xuICAgICAgICB0aGlzLml0ZW1zUGVyUm93U3ViamVjdC5uZXh0KGl0ZW1zUGVyUm93KTtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbXNQZXJSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdncmlkLXRlbXBsYXRlLWNvbHVtbnMnKVxuICAgICAgICAgICAgLnNwbGl0KCcgJykubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldFNvcnRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Py5jb2x1bW5zPy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCAnc2NvcmUnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfQ09MTEVDVElPTl9PUkRFUkVEX1BPU0lUSU9OKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ01fUFJPUF9USVRMRSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX05BTUUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DTV9QUk9QX0NfQ1JFQVRFRCksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX01PRElGSUVEX0RBVEUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DQ01fUFJPUF9SRVBMSUNBVElPTk1PRElGSUVEKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfUkVQTElDQVRJT05TT1VSQ0VUSU1FU1RBTVApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc29tZSgoYzIpID0+IGMudHlwZSA9PT0gYzIudHlwZSAmJiBjMi5uYW1lID09PSBjLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgIXRoaXMuZW50cmllc1NlcnZpY2UuY29uZmlndXJlQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5pbmcgPVxuICAgICAgICAgICAgICAgICAgICAnU29ydCBmaWVsZCAnICtcbiAgICAgICAgICAgICAgICAgICAgYy5uYW1lICtcbiAgICAgICAgICAgICAgICAgICAgJyB3YXMgc3BlY2lmaWVkIGJ1dCBpcyBub3QgcHJlc2VudCBhcyBhIGNvbHVtbi4gJyArXG4gICAgICAgICAgICAgICAgICAgICdJdCB3aWxsIGJlIGlnbm9yZWQuIFBsZWFzZSBhbHNvIGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGluIHRoZSA8bGlzdHM+IHNlY3Rpb24nO1xuICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZ3MuaW5jbHVkZXMod2FybmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5ncy5wdXNoKHdhcm5pbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbkRyb3BOb2RlcyA9IChkcmFnRGF0YTogRHJhZ0RhdGE8VD4pID0+IHRoaXMuZW50cmllc1NlcnZpY2UuZHJhZ0Ryb3AuZHJvcEFsbG93ZWQ/LihkcmFnRGF0YSk7XG5cbiAgICBvbk5vZGVzRHJvcHBlZChkcmFnRGF0YTogRHJhZ0RhdGE8Tm9kZT4pIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcC5kcm9wcGVkKGRyYWdEYXRhLnRhcmdldCwge1xuICAgICAgICAgICAgZWxlbWVudDogZHJhZ0RhdGEuZHJhZ2dlZE5vZGVzLFxuICAgICAgICAgICAgbW9kZTogZHJhZ0RhdGEuYWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREcmFnRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWkuaXNUb3VjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgIG1hcCgodG91Y2gpID0+ICF0b3VjaCAmJiB0aGlzLmVudHJpZXNTZXJ2aWNlLmRyYWdEcm9wPy5kcmFnQWxsb3dlZCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ0RhdGEobm9kZTogVCk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChub2RlOiBUKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZGVkKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhblNjcm9sbChkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnNjcm9sbExlZnQgPiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICB1c2UgYSBzbWFsbCBwaXhlbCBidWZmZXIgKDEwcHgpIGJlY2F1c2Ugc2Nyb2xsaW5nIGFsaWducyB3aXRoIHRoZSBzdGFydCBvZiBlYWNoIGNhcmQgYW5kXG4gICAgICAgICAgICAgICAgIGl0IGNhbiBjYXVzZSBzbGlnaHQgYWxpZ25tZW50IGlzc3VlcyBvbiB0aGUgZW5kIG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxMZWZ0IDwgZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQuY2xpZW50V2lkdGggLSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxheW91dCA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmxlZnQgPSB0aGlzLmNhblNjcm9sbCgnbGVmdCcpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwucmlnaHQgPSB0aGlzLmNhblNjcm9sbCgncmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvU2Nyb2xsKGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0Jykge1xuICAgICAgICAvLyAxIGlzIGVub3VnaCBiZWNhdXNlIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGl0IHZpYSBjc3Mgc25hcHBpbmdcbiAgICAgICAgY29uc3QgbGVmdFNjcm9sbCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAvLyB1c2luZyBzY3JvbGwgYmVjYXVzZSBpdCB3b3JrcyBtb3JlIHJlbGlhYmxlIHRoYW4gc2Nyb2xsQnlcbiAgICAgICAgdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50LnNjcm9sbCh7XG4gICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgIGxlZnRTY3JvbGwgK1xuICAgICAgICAgICAgICAgIE1hdGgubWF4KDI1MCwgcmVjdC53aWR0aCAqIHRoaXMuU2Nyb2xsaW5nT2Zmc2V0UGVyY2VudGFnZSkgKlxuICAgICAgICAgICAgICAgICAgICAoZGlyZWN0aW9uID09PSAncmlnaHQnID8gMSA6IC0xKSxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNDdXN0b21UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIEN1c3RvbVRlbXBsYXRlc0RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgaXNCbG9ja2VkKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucHJvcGVydGllcz8uW1Jlc3RDb25zdGFudHMuQ0NNX1BST1BfSU1QT1JUX0JMT0NLRURdPy5bMF0gPT09ICd0cnVlJztcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2dyaWRUb3A+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNvbmZpZ3VyZUNvbHVtbnNcIlxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIChjbGljayk9XCJjb2x1bW5DaG9vc2VyVmlzaWJsZSQubmV4dCghY29sdW1uQ2hvb3NlclZpc2libGUkLnZhbHVlKVwiXG4gICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICNjb2x1bW5DaG9vc2VyVHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgIFttYXRUb29sdGlwXT1cIidMSVNUX1RBQkxFLkNPTkZJR1VSRV9DT0xVTU5TJyB8IHRyYW5zbGF0ZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTElTVF9UQUJMRS5DT05GSUdVUkVfQ09MVU1OUycgfCB0cmFuc2xhdGVcIlxuICA+XG4gICAgPGkgZXNJY29uPVwic2V0dGluZ3NcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8ZXMtc29ydC1zZWxlY3QtcGFuZWxcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLnNvcnQ/LmFsbG93ZWRcIlxuICAgIGNsYXNzPVwib3JkZXItcGFuZWxcIlxuICAgIFthY3RpdmVdPVwiZW50cmllc1NlcnZpY2Uuc29ydC5hY3RpdmVcIlxuICAgIFtkaXJlY3Rpb25dPVwiZW50cmllc1NlcnZpY2Uuc29ydC5kaXJlY3Rpb25cIlxuICAgIFtjb2x1bW5zXT1cImdldFNvcnRDb2x1bW5zKClcIlxuICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICBbKGN1c3RvbVNvcnRpbmdJblByb2dyZXNzKV09XCJlbnRyaWVzU2VydmljZS5zb3J0LmN1c3RvbVNvcnRpbmdJblByb2dyZXNzXCJcbiAgICAoY3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NDaGFuZ2UpPVwib25DdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc0NoYW5nZSgpXCJcbiAgPjwvZXMtc29ydC1zZWxlY3QtcGFuZWw+XG48L25nLXRlbXBsYXRlPlxuPGVzLWNvbHVtbi1jaG9vc2VyXG4gICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuY29uZmlndXJlQ29sdW1uc1wiXG4gIFsoY29sdW1ucyldPVwiZW50cmllc1NlcnZpY2UuY29sdW1uc1wiXG4gIFtjb2x1bW5DaG9vc2VyVmlzaWJsZV09XCJjb2x1bW5DaG9vc2VyVmlzaWJsZSQgfCBhc3luY1wiXG4gIFtvcmlnaW5dPVwiY29sdW1uQ2hvb3NlclRyaWdnZXJcIlxuICAoY29sdW1uQ2hvb3NlclZpc2libGVDaGFuZ2UpPVwiY29sdW1uQ2hvb3NlclZpc2libGUkLm5leHQoJGV2ZW50KVwiXG4+PC9lcy1jb2x1bW4tY2hvb3Nlcj5cbjxlcy1kcm9wZG93biAjZHJvcGRvd24gW29wdGlvbnNdPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucz8uW1RhcmdldC5MaXN0RHJvcGRvd25dXCI+PC9lcy1kcm9wZG93bj5cblxuPCEtLSBEbyBub3QgcmVuZGVyIHRoZSBsaXN0IGVsZW1lbnQgKGByb2xlPVwibGlzdFwiYCBvciBgbGlgKSB3aGVuIHRoZXJlIGFyZSBubyBsaXN0IGl0ZW1zLiAtLT5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCIobm9kZXMkIHwgYXN5bmMpPy5sZW5ndGggPiAwIHx8IChlbnRyaWVzU2VydmljZS5nbG9iYWxPcHRpb25zU3ViamVjdCB8IGFzeW5jKT8ubGVuZ3RoID4gMFwiXG4+XG4gIDwhLS0gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIHVzZSBuYXRpdmUgYHVsYCBhbmQgYGxpYCBlbGVtZW50cywgYnV0IHRoZXNlIGhhdmUgYSBzdHJpY3QgbW9kZWwsXG4gIHRoYXQgb25seSBhbGxvd3MgYGxpYCBlbGVtZW50cyBhcyBkaXJlY3QgY2hpbGRyZW4gb2YgYHVsYCBlbGVtZW50cy4gU28gd2Ugd291bGQgbmVlZCB0byB1c2UgdGhlXG4gIG5hdGl2ZSBlbGVtZW50cyBhdCBhbGwgcGxhY2VzIHdpdGhvdXQgYW55IGVsZW1lbnRzIGJldHdlZW4gYHVsYCBhbmQgYGxpYC4gLS0+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLnNvcnQ/LmN1c3RvbVNvcnRpbmdJblByb2dyZXNzXCJcbiAgICByb2xlPVwibGlzdFwiXG4gICAgY2xhc3M9XCJjYXJkLWdyaWQgY2FyZC1ncmlkLXJlb3JkZXJcIlxuICAgIGNka0Ryb3BMaXN0R3JvdXBcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlcyQgfCBhc3luYyBhcyBub2Rlc1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQtZ3JpZC1vcmRlci13cmFwcGVyXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImRyb3BMaXN0c1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiaVwiXG4gICAgICA+XG4gICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZFxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuR3JpZFwiXG4gICAgICAgICAgI2l0ZW1cbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaVwiXG4gICAgICAgICAgW2Nka0RyYWdTdGFydERlbGF5XT1cImdldERyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIGNka0RyYWdQcmV2aWV3Q2xhc3M9XCJlcy1jYXJkLWdyaWQtcmVhcnJhbmdlLWRyYWctcHJldmlld1wiXG4gICAgICAgICAgKGNka0RyYWdFbnRlcmVkKT1cIm9uUmVhcnJhbmdlRHJhZ0VudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uUmVhcnJhbmdlRHJhZ1N0YXJ0ZWQoKVwiXG4gICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvblJlYXJyYW5nZURyYWdFbmRlZCgpXCJcbiAgICAgICAgPjwvZXMtbm9kZS1lbnRyaWVzLWNhcmQ+XG4gICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZC1zbWFsbFxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgICAgICAgICAjaXRlbVxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpXCJcbiAgICAgICAgICBbY2RrRHJhZ1N0YXJ0RGVsYXldPVwiZ2V0RHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgY2RrRHJhZ1ByZXZpZXdDbGFzcz1cImVzLWNhcmQtZ3JpZC1yZWFycmFuZ2UtZHJhZy1wcmV2aWV3XCJcbiAgICAgICAgICAoY2RrRHJhZ0VudGVyZWQpPVwib25SZWFycmFuZ2VEcmFnRW50ZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25SZWFycmFuZ2VEcmFnU3RhcnRlZCgpXCJcbiAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uUmVhcnJhbmdlRHJhZ0VuZGVkKClcIlxuICAgICAgICA+PC9lcy1ub2RlLWVudHJpZXMtY2FyZC1zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtZ3JpZC13cmFwcGVyXCIgKm5nSWY9XCIhZW50cmllc1NlcnZpY2Uuc29ydD8uY3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2Nyb2xsSGVscGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgcm9sZT1cImxpc3RcIlxuICAgICAgY2xhc3M9XCJjYXJkLWdyaWQgY2FyZC1ncmlkLWxheW91dC17eyBsYXlvdXQgfX1cIlxuICAgICAgI2dyaWRcbiAgICAgIChlc0JvcmRlckJveE9ic2VydmVyKT1cIm9uR3JpZFNpemVDaGFuZ2VzKClcIlxuICAgICAgZXNJbmZpbml0ZVNjcm9sbFxuICAgICAgKHNjcm9sbCk9XCJ1cGRhdGVTY3JvbGxTdGF0ZSgpXCJcbiAgICAgIChzY3JvbGxlZCk9XCIhdmlzaWJsZUl0ZW1zTGltaXRlZCAmJiBsb2FkRGF0YSgnc2Nyb2xsJylcIlxuICAgID5cbiAgICAgIDxlcy1ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnNcbiAgICAgICAgKm5nSWY9XCIoZW50cmllc1NlcnZpY2UuZ2xvYmFsT3B0aW9uc1N1YmplY3QgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICAgIFtkaXNwbGF5VHlwZV09XCJkaXNwbGF5VHlwZVwiXG4gICAgICA+XG4gICAgICA8L2VzLW5vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlcyQgfCBhc3luYyBhcyBub2Rlc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLWdyaWQtZHJhZy13cmFwcGVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBub2RlczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgIFtlc05vZGVzRHJvcFRhcmdldF09XCJub2RlXCJcbiAgICAgICAgICBbY2FuRHJvcE5vZGVzXT1cImNhbkRyb3BOb2Rlc1wiXG4gICAgICAgICAgKG5vZGVEcm9wcGVkKT1cIm9uTm9kZXNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICNkcm9wVGFyZ2V0PVwiZXNOb2Rlc0Ryb3BUYXJnZXRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ3VzdG9tVGVtcGxhdGUoKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiRhbnkobm9kZSlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ3VzdG9tVGVtcGxhdGUoKVwiPlxuICAgICAgICAgICAgPGVzLW5vZGUtZW50cmllcy1jYXJkXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuR3JpZFwiXG4gICAgICAgICAgICAgICNpdGVtXG4gICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICBbZHJvcGRvd25dPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIShnZXREcmFnRW5hYmxlZCgpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImdldERyYWdEYXRhKG5vZGUpXCJcbiAgICAgICAgICAgICAgZXNOb2Rlc0RyYWdcbiAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKClcIlxuICAgICAgICAgICAgICBbY2xhc3MuY2FyZC1pbXBvcnQtYmxvY2tlZF09XCJpc0Jsb2NrZWQobm9kZSlcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtd2hlbi1kcmFnZ2luZ109XCJcbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nICYmIGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZFxuICAgICAgICAgICAgICAgICAgKmNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICA/IGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtZHJhZy1wcmV2aWV3XCJcbiAgICAgICAgICAgICAgICA+PC9lcy1ub2RlLWVudHJpZXMtY2FyZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2VzLW5vZGUtZW50cmllcy1jYXJkPlxuICAgICAgICAgICAgPGVzLW5vZGUtZW50cmllcy1jYXJkLXNtYWxsXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgICAgICAgICAgICAgI2l0ZW1cbiAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhKGdldERyYWdFbmFibGVkKCkgfCBhc3luYylcIlxuICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiW25vZGVdXCJcbiAgICAgICAgICAgICAgZXNOb2Rlc0RyYWdcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGw+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJkcm9wVGFyZ2V0LmFjdGl2ZT8uY2FuRHJvcD8uZGVueUV4cGxpY2l0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ncmlkLWRyb3AtYmxvY2tlZC1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGVzSWNvbj1cImNhbmNlbFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcFRhcmdldC5hY3RpdmU/LmNhbkRyb3A/LmFjY2VwdFwiIGNsYXNzPVwiY2FyZC1ncmlkLWRyb3AtYWxsb3dlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtlc0ljb25dPVwiZHJvcFRhcmdldC5hY3RpdmUuYWN0aW9uID09PSAnY29weScgPyAnYWRkX2NpcmNsZV9vdXRsaW5lJyA6ICdhcmNoaXZlJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIlxuICAgICFlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyAmJlxuICAgIGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaGFzTW9yZSgpICYmXG4gICAgIXZpc2libGVJdGVtc0xpbWl0ZWQgJiZcbiAgICBlbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3kgPT09ICdpbmZpbml0ZS1zY3JvbGwnICYmXG4gICAgbGF5b3V0ICE9PSAnc2Nyb2xsJ1xuICBcIlxuPlxuICA8ZGl2IGNsYXNzPVwibG9hZC1tb3JlXCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJsb2FkRGF0YSgnYnV0dG9uJylcIj5cbiAgICAgIDxpIGVzSWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAgICA8c3Bhbj57eyAnTE9BRF9NT1JFJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyA9PT0gdHJ1ZSB8fFxuICAgIGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaXNMb2FkaW5nID09PSAnaW5pdGlhbCcgfHxcbiAgICAoZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgPT09ICdwYWdlJyAmJlxuICAgICAgZW50cmllc1NlcnZpY2UucGFnaW5hdGlvblN0cmF0ZWd5ID09PSAnaW5maW5pdGUtc2Nyb2xsJylcbiAgXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxlcy1zcGlubmVyPjwvZXMtc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Njcm9sbEhlbHBlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dCA9PT0gJ3Njcm9sbCdcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNjcm9sbC1oZWxwZXItbGVmdFwiXG4gICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgIChjbGljayk9XCJkb1Njcm9sbCgnbGVmdCcpXCJcbiAgICAgICpuZ0lmPVwic2Nyb2xsLmxlZnRcIlxuICAgID5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRvU2Nyb2xsKCdsZWZ0JylcIj5cbiAgICAgICAgPGkgZXNJY29uPVwia2V5Ym9hcmRfYXJyb3dfbGVmdFwiIFthcmlhXT1cInRydWVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNjcm9sbC1oZWxwZXItcmlnaHRcIlxuICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAoY2xpY2spPVwiZG9TY3JvbGwoJ3JpZ2h0JylcIlxuICAgICAgKm5nSWY9XCJzY3JvbGwucmlnaHRcIlxuICAgID5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRvU2Nyb2xsKCdyaWdodCcpXCI+XG4gICAgICAgIDxpIGVzSWNvbj1cImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgW2FyaWFdPVwidHJ1ZVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWVudHJpZXMtY2FyZC1ncmlkL25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC9ub2RlLWVudHJpZXMtY2FyZC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBUSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFjLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUseUJBQXlCLEVBQUUs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QVMsQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDO0lBQ3BGLENBQUM7OEdBN1VRLDRCQUE0QjtrR0FBNUIsNEJBQTRCLDZiQWMxQix3QkFBd0Isc0pBUXJCLFdBQVcsaUdBRUssVUFBVSw2QkNsRTVDLG84UUFpT0E7OzJGRHZMYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0ksMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNO3FOQVlaLG9CQUFvQjtzQkFBdEQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBQ1csT0FBTztzQkFBbEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsQyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsd0JBQXdCO2dCQVFSLGNBQWM7c0JBQXhDLFlBQVk7dUJBQUMsV0FBVztnQkFDTixPQUFPO3NCQUF6QixTQUFTO3VCQUFDLE1BQU07Z0JBQzJCLFFBQVE7c0JBQW5ELFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDakMsV0FBVztzQkFBbkIsS0FBSztnQkEyQndDLG1CQUFtQjtzQkFBaEUsV0FBVzt1QkFBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRW50ZXIsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR3JpZExheW91dCwgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgSXRlbXNDYXAgfSBmcm9tICcuLi9pdGVtcy1jYXAnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9zb3J0LXNlbGVjdC1wYW5lbC9zb3J0LXNlbGVjdC1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzRGF0YVNvdXJjZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMtZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBMaXN0SXRlbVNvcnQgfSBmcm9tICcuLi8uLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRHJhZ0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcblxubGV0IGRpc3BsYXllZFdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy1jYXJkLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDYXJkR3JpZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcmVhZG9ubHkgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSA9IE5vZGVFbnRyaWVzRGlzcGxheVR5cGU7XG4gICAgcmVhZG9ubHkgVGFyZ2V0ID0gVGFyZ2V0O1xuICAgIC8qKlxuICAgICAqIHJlbGF0aXZlIHNjcm9sbGluZyB3aGVuIGEgc2Nyb2xsaW5nIGFycm93IChsZWZ0IG9yIHJpZ2h0KSBpcyB1c2VkXG4gICAgICogYSB2YWx1ZSBvZiAxIHdvdWxkIG1lYW4gdG8gc2Nyb2xsIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBlbnRpcmUgY29udGVudFxuICAgICAqL1xuICAgIHJlYWRvbmx5IFNjcm9sbGluZ09mZnNldFBlcmNlbnRhZ2UgPSAwLjQ7XG5cbiAgICBjb2x1bW5DaG9vc2VyVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBAVmlld0NoaWxkKCdjb2x1bW5DaG9vc2VyVHJpZ2dlcicpIGNvbHVtbkNob29zZXJUcmlnZ2VyOiBDZGtPdmVybGF5T3JpZ2luO1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRUb3AnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZXQgZ3JpZFRvcCh2YWx1ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckdyaWRUb3AodmFsdWUpO1xuICAgIH1cbiAgICBAVmlld0NoaWxkKFNvcnRTZWxlY3RQYW5lbENvbXBvbmVudClcbiAgICBzZXQgc29ydFBhbmVsKHZhbHVlOiBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQpIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlUmVtb3RlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBhcyBhbnkpLnNvcnRQYW5lbCA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBAVmlld0NoaWxkcmVuKENka0Ryb3BMaXN0KSBkcm9wTGlzdHNRdWVyeTogUXVlcnlMaXN0PENka0Ryb3BMaXN0PjtcbiAgICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdpdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGl0ZW1SZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlOiBOb2RlRW50cmllc0Rpc3BsYXlUeXBlO1xuXG4gICAgaXNEcmFnZ2luZyA9IGZhbHNlOyAvLyBEcmFnLWFuZC1kcm9wLCBub3QgcmVhcnJhbmdlXG4gICAgZHJvcExpc3RzOiBDZGtEcm9wTGlzdFtdO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzaG93biBpdGVtcyBpcyBsaW1pdGVkIGJ5IGBncmlkQ29uZmlnLm1heFJvd3NgLlxuICAgICAqXG4gICAgICogQSB2YWx1ZSBvZiBgdHJ1ZWAgZG9lcyBub3QgbWVhbiwgdGhhdCB0aGVyZSB3b3VsZCBiZSBtb3JlIGl0ZW1zIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICB2aXNpYmxlSXRlbXNMaW1pdGVkID0gZmFsc2U7XG4gICAgbGF5b3V0OiBHcmlkTGF5b3V0O1xuICAgIC8qKlxuICAgICAqIHVwZGF0ZXMgdmlhIGJveE9ic2VydmVyXG4gICAgICogYW5kIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBpZiBzY3JvbGxpbmcgaW4gdGhlIGRpcmVjdGlvbiBpcyBjdXJyZW50bHkgZmVhc2libGVcbiAgICAgKi9cbiAgICBzY3JvbGwgPSB7XG4gICAgICAgIGxlZnQ6IGZhbHNlLFxuICAgICAgICByaWdodDogZmFsc2UsXG4gICAgfTtcblxuICAgIHJlYWRvbmx5IG5vZGVzJDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heFJvd3MkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0JDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zUGVyUm93U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gICAgcmVhZG9ubHkgaXRlbXNDYXAgPSBuZXcgSXRlbXNDYXA8VD4oKTtcbiAgICBwcml2YXRlIGdsb2JhbEN1cnNvclN0eWxlOiBIVE1MU3R5bGVFbGVtZW50O1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tc2Nyb2xsLWdyYWRpZW50LWNvbG9yJykgc2Nyb2xsR3JhZGllbnRDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzU2VydmljZTogTm9kZUVudHJpZXNTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgZW50cmllc0dsb2JhbFNlcnZpY2U6IE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHVibGljIHVpOiBVSVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubm9kZXMkID0gdGhpcy5lbnRyaWVzU2VydmljZS5kYXRhU291cmNlJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChkYXRhU291cmNlKSA9PiBkYXRhU291cmNlPy5jb25uZWN0KCkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1heFJvd3MkID0gdGhpcy5lbnRyaWVzU2VydmljZS5ncmlkQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgbWFwKChncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnPy5tYXhSb3dzIHx8IG51bGwpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sYXlvdXQkID0gdGhpcy5lbnRyaWVzU2VydmljZS5ncmlkQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgbWFwKChncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnPy5sYXlvdXQgfHwgJ2dyaWQnKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KCgpID0+ICh0aGlzLnNjcm9sbEdyYWRpZW50Q29sb3IgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLnNjcm9sbEdyYWRpZW50Q29sb3IoKSkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdGVySXRlbXNDYXAoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckxheW91dCgpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaWJsZUl0ZW1zTGltaXRlZCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckdyaWRUb3AoZ3JpZFRvcDogVGVtcGxhdGVSZWY8dW5rbm93bj4pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlciA9IGdyaWRUb3A7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVzU2VydmljZS5lbnRyaWVzVG9wTWF0dGVyID09PSBncmlkVG9wKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5lbnRyaWVzVG9wTWF0dGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3Rlckl0ZW1zQ2FwKCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YVNvdXJjZSkgPT4gKGRhdGFTb3VyY2UuaXRlbXNDYXAgPSB0aGlzLml0ZW1zQ2FwKSk7XG4gICAgICAgIHJ4anMuY29tYmluZUxhdGVzdChbdGhpcy5pdGVtc1BlclJvd1N1YmplY3QucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSwgdGhpcy5tYXhSb3dzJF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtpdGVtc1BlclJvdywgbWF4Um93c10pID0+XG4gICAgICAgICAgICAgICAgICAgIG1heFJvd3MgPiAwICYmIGl0ZW1zUGVyUm93ICE9PSBudWxsID8gaXRlbXNQZXJSb3cgKiBtYXhSb3dzIDogbnVsbCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2FwKSA9PiAodGhpcy5pdGVtc0NhcC5jYXAgPSBjYXApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGF5b3V0KCkge1xuICAgICAgICB0aGlzLmxheW91dCQuc3Vic2NyaWJlKChsYXlvdXQpID0+ICh0aGlzLmxheW91dCA9IGxheW91dCkpO1xuICAgIH1cblxuICAgIG9uU29ydENoYW5nZShzb3J0OiBTb3J0KSB7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydC5hY3RpdmUgPSBzb3J0LmFjdGl2ZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0LmRpcmVjdGlvbiA9IHNvcnQuZGlyZWN0aW9uO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQpO1xuICAgIH1cblxuICAgIGxvYWREYXRhKHNvdXJjZTogJ3Njcm9sbCcgfCAnYnV0dG9uJykge1xuICAgICAgICAvLyBAVE9ETzogTWF5YmUgdGhpcyBpcyBiZXR0ZXIgaGFuZGxlZCBpbiBhIG1vcmUgY2VudHJhbGVkIHNlcnZpY2VcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgZm9vdGVyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb290ZXInKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMuaXRlbSgwKS5pbm5lckhUTUwudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvdWxkTG9hZE1vcmUgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLmxvYWRNb3JlKHNvdXJjZSk7XG4gICAgICAgIGlmIChjb3VsZExvYWRNb3JlICYmIHNvdXJjZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdE5ld0l0ZW1XaGVuTG9hZGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkN1c3RvbVNvcnRpbmdJblByb2dyZXNzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERyb3BMaXN0cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdFbnRlcmVkKCRldmVudDogQ2RrRHJhZ0VudGVyKSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICAkZXZlbnQuaXRlbS5kYXRhLFxuICAgICAgICAgICAgJGV2ZW50LmNvbnRhaW5lci5kYXRhLFxuICAgICAgICApO1xuICAgICAgICAvLyBgQ2RrRHJhZ2AgZG9lc24ndCByZWFsbHkgd2FudCB1cyB0byByZWFycmFuZ2UgdGhlIGl0ZW1zIHdoaWxlIGRyYWdnaW5nLiBJdHMgY2FjaGVkXG4gICAgICAgIC8vIGVsZW1lbnQgcG9zaXRpb25zIGdldCBvdXQgb2Ygc3luYyB1bmxlc3Mgd2UgdXBkYXRlIHRoZW0gbWFudWFsbHkuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wTGlzdHM/LmZvckVhY2goKGxpc3QpID0+IChsaXN0Ll9kcm9wTGlzdFJlZiBhcyBhbnkpWydfY2FjaGVJdGVtcyddKCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdTdGFydGVkKCkge1xuICAgICAgICB0aGlzLmdsb2JhbEN1cnNvclN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmdsb2JhbEN1cnNvclN0eWxlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZS5pbm5lckhUTUwgPSBgKiB7Y3Vyc29yOiBncmFiYmluZyAhaW1wb3J0YW50OyB9YDtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdFbmRlZCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmdsb2JhbEN1cnNvclN0eWxlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ1N0YXJ0RGVsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMudWkuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDUwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclZpc2libGVJdGVtc0xpbWl0ZWQoKSB7XG4gICAgICAgIHRoaXMubWF4Um93cyQuc3Vic2NyaWJlKChtYXhSb3dzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVJdGVtc0xpbWl0ZWQgPSBtYXhSb3dzID4gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoRHJvcExpc3RzKCkge1xuICAgICAgICB0aGlzLmRyb3BMaXN0cyA9IHRoaXMuZHJvcExpc3RzUXVlcnkudG9BcnJheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNGaXJzdE5ld0l0ZW1XaGVuTG9hZGVkKCkge1xuICAgICAgICBjb25zdCBvbGRMZW5ndGggPSB0aGlzLml0ZW1SZWZzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5pdGVtUmVmcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE5vZGVFbnRyaWVzQ2FyZEdyaWRDb21wb25lbnQ8VD5bJ2l0ZW1SZWZzJ10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gb2xkTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbmNlKGl0ZW1zLmdldChvbGRMZW5ndGgpLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNPbmNlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgb25HcmlkU2l6ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUm93ID0gdGhpcy5nZXRJdGVtc1BlclJvdygpO1xuICAgICAgICB0aGlzLml0ZW1zUGVyUm93U3ViamVjdC5uZXh0KGl0ZW1zUGVyUm93KTtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbXNQZXJSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdncmlkLXRlbXBsYXRlLWNvbHVtbnMnKVxuICAgICAgICAgICAgLnNwbGl0KCcgJykubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldFNvcnRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Py5jb2x1bW5zPy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCAnc2NvcmUnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfQ09MTEVDVElPTl9PUkRFUkVEX1BPU0lUSU9OKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ01fUFJPUF9USVRMRSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX05BTUUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DTV9QUk9QX0NfQ1JFQVRFRCksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX01PRElGSUVEX0RBVEUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DQ01fUFJPUF9SRVBMSUNBVElPTk1PRElGSUVEKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfUkVQTElDQVRJT05TT1VSQ0VUSU1FU1RBTVApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc29tZSgoYzIpID0+IGMudHlwZSA9PT0gYzIudHlwZSAmJiBjMi5uYW1lID09PSBjLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgIXRoaXMuZW50cmllc1NlcnZpY2UuY29uZmlndXJlQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQ/LmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FybmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAnU29ydCBmaWVsZCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnIHdhcyBzcGVjaWZpZWQgYnV0IGlzIG5vdCBwcmVzZW50IGFzIGEgY29sdW1uLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdJdCB3aWxsIGJlIGlnbm9yZWQuIFBsZWFzZSBhbHNvIGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGluIHRoZSA8bGlzdHM+IHNlY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXllZFdhcm5pbmdzLmluY2x1ZGVzKHdhcm5pbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5ncy5wdXNoKHdhcm5pbmcpO1xuICAgICAgICAgICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbkRyb3BOb2RlcyA9IChkcmFnRGF0YTogRHJhZ0RhdGE8VD4pID0+IHRoaXMuZW50cmllc1NlcnZpY2UuZHJhZ0Ryb3AuZHJvcEFsbG93ZWQ/LihkcmFnRGF0YSk7XG5cbiAgICBvbk5vZGVzRHJvcHBlZChkcmFnRGF0YTogRHJhZ0RhdGE8Tm9kZT4pIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcC5kcm9wcGVkKGRyYWdEYXRhLnRhcmdldCwge1xuICAgICAgICAgICAgZWxlbWVudDogZHJhZ0RhdGEuZHJhZ2dlZE5vZGVzLFxuICAgICAgICAgICAgbW9kZTogZHJhZ0RhdGEuYWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREcmFnRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWkuaXNUb3VjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgIG1hcCgodG91Y2gpID0+ICF0b3VjaCAmJiB0aGlzLmVudHJpZXNTZXJ2aWNlLmRyYWdEcm9wPy5kcmFnQWxsb3dlZCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ0RhdGEobm9kZTogVCk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChub2RlOiBUKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZGVkKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhblNjcm9sbChkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnNjcm9sbExlZnQgPiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICB1c2UgYSBzbWFsbCBwaXhlbCBidWZmZXIgKDEwcHgpIGJlY2F1c2Ugc2Nyb2xsaW5nIGFsaWducyB3aXRoIHRoZSBzdGFydCBvZiBlYWNoIGNhcmQgYW5kXG4gICAgICAgICAgICAgICAgIGl0IGNhbiBjYXVzZSBzbGlnaHQgYWxpZ25tZW50IGlzc3VlcyBvbiB0aGUgZW5kIG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxMZWZ0IDwgZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQuY2xpZW50V2lkdGggLSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxheW91dCA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmxlZnQgPSB0aGlzLmNhblNjcm9sbCgnbGVmdCcpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwucmlnaHQgPSB0aGlzLmNhblNjcm9sbCgncmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvU2Nyb2xsKGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0Jykge1xuICAgICAgICAvLyAxIGlzIGVub3VnaCBiZWNhdXNlIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGl0IHZpYSBjc3Mgc25hcHBpbmdcbiAgICAgICAgY29uc3QgbGVmdFNjcm9sbCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAvLyB1c2luZyBzY3JvbGwgYmVjYXVzZSBpdCB3b3JrcyBtb3JlIHJlbGlhYmxlIHRoYW4gc2Nyb2xsQnlcbiAgICAgICAgdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50LnNjcm9sbCh7XG4gICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgIGxlZnRTY3JvbGwgK1xuICAgICAgICAgICAgICAgIE1hdGgubWF4KDI1MCwgcmVjdC53aWR0aCAqIHRoaXMuU2Nyb2xsaW5nT2Zmc2V0UGVyY2VudGFnZSkgKlxuICAgICAgICAgICAgICAgICAgICAoZGlyZWN0aW9uID09PSAncmlnaHQnID8gMSA6IC0xKSxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNDdXN0b21UZW1wbGF0ZShub2RlOiBUKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDdXN0b21UZW1wbGF0ZXNEYXRhU291cmNlIHx8ICgobm9kZSBhcyBhbnkpLmVsZW1lbnRSZWYpO1xuICAgIH1cblxuICAgIGlzQmxvY2tlZChub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnByb3BlcnRpZXM/LltSZXN0Q29uc3RhbnRzLkNDTV9QUk9QX0lNUE9SVF9CTE9DS0VEXT8uWzBdID09PSAndHJ1ZSc7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNncmlkVG9wPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5jb25maWd1cmVDb2x1bW5zXCJcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICAoY2xpY2spPVwiY29sdW1uQ2hvb3NlclZpc2libGUkLm5leHQoIWNvbHVtbkNob29zZXJWaXNpYmxlJC52YWx1ZSlcIlxuICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAjY29sdW1uQ2hvb3NlclRyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBbbWF0VG9vbHRpcF09XCInTElTVF9UQUJMRS5DT05GSUdVUkVfQ09MVU1OUycgfCB0cmFuc2xhdGVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0xJU1RfVEFCTEUuQ09ORklHVVJFX0NPTFVNTlMnIHwgdHJhbnNsYXRlXCJcbiAgPlxuICAgIDxpIGVzSWNvbj1cInNldHRpbmdzXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPGVzLXNvcnQtc2VsZWN0LXBhbmVsXG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zb3J0Py5hbGxvd2VkXCJcbiAgICBjbGFzcz1cIm9yZGVyLXBhbmVsXCJcbiAgICBbYWN0aXZlXT1cImVudHJpZXNTZXJ2aWNlLnNvcnQuYWN0aXZlXCJcbiAgICBbZGlyZWN0aW9uXT1cImVudHJpZXNTZXJ2aWNlLnNvcnQuZGlyZWN0aW9uXCJcbiAgICBbY29sdW1uc109XCJnZXRTb3J0Q29sdW1ucygpXCJcbiAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgWyhjdXN0b21Tb3J0aW5nSW5Qcm9ncmVzcyldPVwiZW50cmllc1NlcnZpY2Uuc29ydC5jdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc1wiXG4gICAgKGN1c3RvbVNvcnRpbmdJblByb2dyZXNzQ2hhbmdlKT1cIm9uQ3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NDaGFuZ2UoKVwiXG4gID48L2VzLXNvcnQtc2VsZWN0LXBhbmVsPlxuPC9uZy10ZW1wbGF0ZT5cbjxlcy1jb2x1bW4tY2hvb3NlclxuICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNvbmZpZ3VyZUNvbHVtbnNcIlxuICBbKGNvbHVtbnMpXT1cImVudHJpZXNTZXJ2aWNlLmNvbHVtbnNcIlxuICBbY29sdW1uQ2hvb3NlclZpc2libGVdPVwiY29sdW1uQ2hvb3NlclZpc2libGUkIHwgYXN5bmNcIlxuICBbb3JpZ2luXT1cImNvbHVtbkNob29zZXJUcmlnZ2VyXCJcbiAgKGNvbHVtbkNob29zZXJWaXNpYmxlQ2hhbmdlKT1cImNvbHVtbkNob29zZXJWaXNpYmxlJC5uZXh0KCRldmVudClcIlxuPjwvZXMtY29sdW1uLWNob29zZXI+XG48ZXMtZHJvcGRvd24gI2Ryb3Bkb3duIFtvcHRpb25zXT1cImVudHJpZXNTZXJ2aWNlLm9wdGlvbnM/LltUYXJnZXQuTGlzdERyb3Bkb3duXVwiPjwvZXMtZHJvcGRvd24+XG5cbjwhLS0gRG8gbm90IHJlbmRlciB0aGUgbGlzdCBlbGVtZW50IChgcm9sZT1cImxpc3RcImAgb3IgYGxpYCkgd2hlbiB0aGVyZSBhcmUgbm8gbGlzdCBpdGVtcy4gLS0+XG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwiKG5vZGVzJCB8IGFzeW5jKT8ubGVuZ3RoID4gMCB8fCAoZW50cmllc1NlcnZpY2UuZ2xvYmFsT3B0aW9uc1N1YmplY3QgfCBhc3luYyk/Lmxlbmd0aCA+IDBcIlxuPlxuICA8IS0tIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCB1c2UgbmF0aXZlIGB1bGAgYW5kIGBsaWAgZWxlbWVudHMsIGJ1dCB0aGVzZSBoYXZlIGEgc3RyaWN0IG1vZGVsLFxuICB0aGF0IG9ubHkgYWxsb3dzIGBsaWAgZWxlbWVudHMgYXMgZGlyZWN0IGNoaWxkcmVuIG9mIGB1bGAgZWxlbWVudHMuIFNvIHdlIHdvdWxkIG5lZWQgdG8gdXNlIHRoZVxuICBuYXRpdmUgZWxlbWVudHMgYXQgYWxsIHBsYWNlcyB3aXRob3V0IGFueSBlbGVtZW50cyBiZXR3ZWVuIGB1bGAgYW5kIGBsaWAuIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zb3J0Py5jdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc1wiXG4gICAgcm9sZT1cImxpc3RcIlxuICAgIGNsYXNzPVwiY2FyZC1ncmlkIGNhcmQtZ3JpZC1yZW9yZGVyXCJcbiAgICBjZGtEcm9wTGlzdEdyb3VwXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMkIHwgYXN5bmMgYXMgbm9kZXNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkLWdyaWQtb3JkZXItd3JhcHBlclwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIG5vZGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJkcm9wTGlzdHNcIlxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImlcIlxuICAgICAgPlxuICAgICAgICA8ZXMtbm9kZS1lbnRyaWVzLWNhcmRcbiAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLkdyaWRcIlxuICAgICAgICAgICNpdGVtXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImlcIlxuICAgICAgICAgIFtjZGtEcmFnU3RhcnREZWxheV09XCJnZXREcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBjZGtEcmFnUHJldmlld0NsYXNzPVwiZXMtY2FyZC1ncmlkLXJlYXJyYW5nZS1kcmFnLXByZXZpZXdcIlxuICAgICAgICAgIChjZGtEcmFnRW50ZXJlZCk9XCJvblJlYXJyYW5nZURyYWdFbnRlcmVkKCRldmVudClcIlxuICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvblJlYXJyYW5nZURyYWdTdGFydGVkKClcIlxuICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25SZWFycmFuZ2VEcmFnRW5kZWQoKVwiXG4gICAgICAgID48L2VzLW5vZGUtZW50cmllcy1jYXJkPlxuICAgICAgICA8ZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGxcbiAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZFwiXG4gICAgICAgICAgI2l0ZW1cbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaVwiXG4gICAgICAgICAgW2Nka0RyYWdTdGFydERlbGF5XT1cImdldERyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIGNka0RyYWdQcmV2aWV3Q2xhc3M9XCJlcy1jYXJkLWdyaWQtcmVhcnJhbmdlLWRyYWctcHJldmlld1wiXG4gICAgICAgICAgKGNka0RyYWdFbnRlcmVkKT1cIm9uUmVhcnJhbmdlRHJhZ0VudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uUmVhcnJhbmdlRHJhZ1N0YXJ0ZWQoKVwiXG4gICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvblJlYXJyYW5nZURyYWdFbmRlZCgpXCJcbiAgICAgICAgPjwvZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWdyaWQtd3JhcHBlclwiICpuZ0lmPVwiIWVudHJpZXNTZXJ2aWNlLnNvcnQ/LmN1c3RvbVNvcnRpbmdJblByb2dyZXNzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNjcm9sbEhlbHBlclwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgIHJvbGU9XCJsaXN0XCJcbiAgICAgIGNsYXNzPVwiY2FyZC1ncmlkIGNhcmQtZ3JpZC1sYXlvdXQte3sgbGF5b3V0IH19XCJcbiAgICAgICNncmlkXG4gICAgICAoZXNCb3JkZXJCb3hPYnNlcnZlcik9XCJvbkdyaWRTaXplQ2hhbmdlcygpXCJcbiAgICAgIGVzSW5maW5pdGVTY3JvbGxcbiAgICAgIChzY3JvbGwpPVwidXBkYXRlU2Nyb2xsU3RhdGUoKVwiXG4gICAgICAoc2Nyb2xsZWQpPVwiIXZpc2libGVJdGVtc0xpbWl0ZWQgJiYgbG9hZERhdGEoJ3Njcm9sbCcpXCJcbiAgICA+XG4gICAgICA8ZXMtbm9kZS1lbnRyaWVzLWdsb2JhbC1vcHRpb25zXG4gICAgICAgICpuZ0lmPVwiKGVudHJpZXNTZXJ2aWNlLmdsb2JhbE9wdGlvbnNTdWJqZWN0IHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgICBbZGlzcGxheVR5cGVdPVwiZGlzcGxheVR5cGVcIlxuICAgICAgPlxuICAgICAgPC9lcy1ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnM+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMkIHwgYXN5bmMgYXMgbm9kZXNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ncmlkLWRyYWctd3JhcHBlclwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICBbZXNOb2Rlc0Ryb3BUYXJnZXRdPVwibm9kZVwiXG4gICAgICAgICAgW2NhbkRyb3BOb2Rlc109XCJjYW5Ecm9wTm9kZXNcIlxuICAgICAgICAgIChub2RlRHJvcHBlZCk9XCJvbk5vZGVzRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICAjZHJvcFRhcmdldD1cImVzTm9kZXNEcm9wVGFyZ2V0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0N1c3RvbVRlbXBsYXRlKG5vZGUpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiJGFueShub2RlKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDdXN0b21UZW1wbGF0ZShub2RlKVwiPlxuICAgICAgICAgICAgPGVzLW5vZGUtZW50cmllcy1jYXJkXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuR3JpZFwiXG4gICAgICAgICAgICAgICNpdGVtXG4gICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICBbZHJvcGRvd25dPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIShnZXREcmFnRW5hYmxlZCgpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImdldERyYWdEYXRhKG5vZGUpXCJcbiAgICAgICAgICAgICAgZXNOb2Rlc0RyYWdcbiAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKClcIlxuICAgICAgICAgICAgICBbY2xhc3MuY2FyZC1pbXBvcnQtYmxvY2tlZF09XCJpc0Jsb2NrZWQobm9kZSlcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtd2hlbi1kcmFnZ2luZ109XCJcbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nICYmIGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZFxuICAgICAgICAgICAgICAgICAgKmNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICA/IGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtZHJhZy1wcmV2aWV3XCJcbiAgICAgICAgICAgICAgICA+PC9lcy1ub2RlLWVudHJpZXMtY2FyZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2VzLW5vZGUtZW50cmllcy1jYXJkPlxuICAgICAgICAgICAgPGVzLW5vZGUtZW50cmllcy1jYXJkLXNtYWxsXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgICAgICAgICAgICAgI2l0ZW1cbiAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhKGdldERyYWdFbmFibGVkKCkgfCBhc3luYylcIlxuICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiW25vZGVdXCJcbiAgICAgICAgICAgICAgZXNOb2Rlc0RyYWdcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGw+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJkcm9wVGFyZ2V0LmFjdGl2ZT8uY2FuRHJvcD8uZGVueUV4cGxpY2l0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ncmlkLWRyb3AtYmxvY2tlZC1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGVzSWNvbj1cImNhbmNlbFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcFRhcmdldC5hY3RpdmU/LmNhbkRyb3A/LmFjY2VwdFwiIGNsYXNzPVwiY2FyZC1ncmlkLWRyb3AtYWxsb3dlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtlc0ljb25dPVwiZHJvcFRhcmdldC5hY3RpdmUuYWN0aW9uID09PSAnY29weScgPyAnYWRkX2NpcmNsZV9vdXRsaW5lJyA6ICdhcmNoaXZlJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIlxuICAgICFlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyAmJlxuICAgIGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaGFzTW9yZSgpICYmXG4gICAgIXZpc2libGVJdGVtc0xpbWl0ZWQgJiZcbiAgICBlbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3kgPT09ICdpbmZpbml0ZS1zY3JvbGwnICYmXG4gICAgbGF5b3V0ICE9PSAnc2Nyb2xsJ1xuICBcIlxuPlxuICA8ZGl2IGNsYXNzPVwibG9hZC1tb3JlXCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJsb2FkRGF0YSgnYnV0dG9uJylcIj5cbiAgICAgIDxpIGVzSWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAgICA8c3Bhbj57eyAnTE9BRF9NT1JFJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyA9PT0gdHJ1ZSB8fFxuICAgIGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaXNMb2FkaW5nID09PSAnaW5pdGlhbCcgfHxcbiAgICAoZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgPT09ICdwYWdlJyAmJlxuICAgICAgZW50cmllc1NlcnZpY2UucGFnaW5hdGlvblN0cmF0ZWd5ID09PSAnaW5maW5pdGUtc2Nyb2xsJylcbiAgXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxlcy1zcGlubmVyPjwvZXMtc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Njcm9sbEhlbHBlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dCA9PT0gJ3Njcm9sbCdcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNjcm9sbC1oZWxwZXItbGVmdFwiXG4gICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgIChjbGljayk9XCJkb1Njcm9sbCgnbGVmdCcpXCJcbiAgICAgICpuZ0lmPVwic2Nyb2xsLmxlZnRcIlxuICAgID5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRvU2Nyb2xsKCdsZWZ0JylcIj5cbiAgICAgICAgPGkgZXNJY29uPVwia2V5Ym9hcmRfYXJyb3dfbGVmdFwiIFthcmlhXT1cInRydWVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNjcm9sbC1oZWxwZXItcmlnaHRcIlxuICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAoY2xpY2spPVwiZG9TY3JvbGwoJ3JpZ2h0JylcIlxuICAgICAgKm5nSWY9XCJzY3JvbGwucmlnaHRcIlxuICAgID5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRvU2Nyb2xsKCdyaWdodCcpXCI+XG4gICAgICAgIDxpIGVzSWNvbj1cImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgW2FyaWFdPVwidHJ1ZVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs
CHANGED
|
@@ -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: "18.0.2", 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: "18.0.2", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i6.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i7.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i8.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i9.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }] }); }
|
|
37
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i6.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i7.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i8.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i9.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }] }); }
|
|
38
38
|
}
|
|
39
39
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardSmallComponent, decorators: [{
|
|
40
40
|
type: Component,
|
|
41
|
-
args: [{ selector: 'es-node-entries-card-small', template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"] }]
|
|
41
|
+
args: [{ selector: 'es-node-entries-card-small', template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"] }]
|
|
42
42
|
}], ctorParameters: () => [{ type: i1.NodeEntriesService }, { type: i2.NodeHelperService }, { type: i3.NodeEntriesTemplatesService }], propDecorators: { node: [{
|
|
43
43
|
type: Input
|
|
44
44
|
}] } });
|