igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
302 lines • 23.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, HostBinding, Input, ViewChild, QueryList, ViewChildren, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, HostListener } from '@angular/core';
import { IgxColumnComponent } from './column.component';
import { IgxFilteringService } from './filtering/grid-filtering.service';
import { GridBaseAPIService } from './api.service';
import { IgxColumnResizingService } from './grid-column-resizing.service';
import { IgxGridHeaderComponent } from './grid-header.component';
import { IgxGridFilteringCellComponent } from './filtering/grid-filtering-cell.component';
/** @type {?} */
var Z_INDEX = 9999;
/**
* @hidden
*/
var IgxGridHeaderGroupComponent = /** @class */ (function () {
function IgxGridHeaderGroupComponent(cdr, gridAPI, element, colResizingService, filteringService) {
this.cdr = cdr;
this.gridAPI = gridAPI;
this.element = element;
this.colResizingService = colResizingService;
this.filteringService = filteringService;
}
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "width", {
/**
* Gets the width of the header group.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets the width of the header group.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
return this.grid.getHeaderGroupWidth(this.column);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "styleClasses", {
/**
* Gets the style classes of the header group.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets the style classes of the header group.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
/** @type {?} */
var defaultClasses = [
'igx-grid__thead-item',
this.column.headerGroupClasses
];
/** @type {?} */
var classList = {
'igx-grid__th--pinned': this.isPinned,
'igx-grid__th--pinned-last': this.isLastPinned,
'igx-grid__drag-col-header': this.isHeaderDragged,
'igx-grid__th--filtering': this.isFiltered
};
Object.entries(classList).forEach(function (_a) {
var _b = tslib_1.__read(_a, 2), className = _b[0], value = _b[1];
if (value) {
defaultClasses.push(className);
}
});
return defaultClasses.join(' ');
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "zIndex", {
/**
* @hidden
*/
get: /**
* @hidden
* @return {?}
*/
function () {
if (!this.column.pinned) {
return null;
}
return Z_INDEX - this.grid.pinnedColumns.indexOf(this.column);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "grid", {
/**
* Gets the grid of the header group.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets the grid of the header group.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
return this.gridAPI.grid;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isFiltered", {
/**
* Gets whether the header group belongs to a column that is filtered.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets whether the header group belongs to a column that is filtered.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
return this.filteringService.filteredColumn === this.column;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isLastPinned", {
/**
* Gets whether the header group is stored in the last column in the pinned area.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets whether the header group is stored in the last column in the pinned area.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
return this.column.isLastPinned;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isPinned", {
/**
* Gets whether the header group is stored in a pinned column.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets whether the header group is stored in a pinned column.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
return this.column.pinned;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isHeaderDragged", {
/**
* Gets whether the header group belongs to a column that is moved.
* @memberof IgxGridHeaderGroupComponent
*/
get: /**
* Gets whether the header group belongs to a column that is moved.
* \@memberof IgxGridHeaderGroupComponent
* @return {?}
*/
function () {
return this.grid.draggedColumn === this.column;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "hasLastPinnedChildColumn", {
/**
* @hidden
*/
get: /**
* @hidden
* @return {?}
*/
function () {
return this.column.allChildren.some(function (child) { return child.isLastPinned; });
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "height", {
/**
* @hidden
*/
get: /**
* @hidden
* @return {?}
*/
function () {
return this.element.nativeElement.getBoundingClientRect().height;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
/**
* @hidden
* @param {?} event
* @return {?}
*/
IgxGridHeaderGroupComponent.prototype.onMouseDown = /**
* @hidden
* @param {?} event
* @return {?}
*/
function (event) {
// hack for preventing text selection in IE and Edge while dragging the resizer
event.preventDefault();
};
/**
* @return {?}
*/
IgxGridHeaderGroupComponent.prototype.ngDoCheck = /**
* @return {?}
*/
function () {
this.cdr.markForCheck();
};
IgxGridHeaderGroupComponent.decorators = [
{ type: Component, args: [{
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-grid-header-group',
template: "<ng-container *ngIf=\"column.columnGroup\">\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-left\"></span>\n <div class=\"igx-grid__thead-title\"\n [ngClass]=\"{'igx-grid__th--pinned-last': hasLastPinnedChildColumn}\"\n [igxColumnMovingDrag]=\"column\"\n [dragGhostHost]=\"grid.outletDirective.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\">{{ column.header }}</div>\n <div class=\"igx-grid__thead-group\">\n <ng-container *ngFor=\"let child of column.children\">\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid__thead-subgroup\"\n [column]=\"child\"\n [gridID]=\"child.grid.id\"\n [style.min-width.px]=\"grid.getHeaderGroupWidth(child)\"\n [style.flex-basis.px]=\"grid.getHeaderGroupWidth(child)\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-right\"></span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.columnGroup\">\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-left\"></span>\n <igx-grid-header [igxColumnMovingDrag]=\"column\" [dragGhostHost]=\"grid.igxFilteringOverlayOutlet\" [attr.droppable]=\"true\" [igxColumnMovingDrop]=\"column\" [gridID]=\"column.grid.id\" [column]=\"column\"></igx-grid-header>\n <igx-grid-filtering-cell *ngIf=\"grid.allowFiltering && grid.filterMode == 'quickFilter'\" [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n <span *ngIf=\"!column.columnGroup && column.resizable\" class=\"igx-grid__th-resize-handle\"\n [igxResizeHandle]=\"column\"\n [attr.draggable]=\"false\"\n [style.cursor]=\"colResizingService.resizeCursor\">\n </span>\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-right\"></span>\n</ng-container>\n"
}] }
];
/** @nocollapse */
IgxGridHeaderGroupComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: GridBaseAPIService },
{ type: ElementRef },
{ type: IgxColumnResizingService },
{ type: IgxFilteringService }
]; };
IgxGridHeaderGroupComponent.propDecorators = {
column: [{ type: Input }],
gridID: [{ type: Input }],
headerCell: [{ type: ViewChild, args: [IgxGridHeaderComponent,] }],
filterCell: [{ type: ViewChild, args: [IgxGridFilteringCellComponent,] }],
children: [{ type: ViewChildren, args: [forwardRef(function () { return IgxGridHeaderGroupComponent; }), { read: IgxGridHeaderGroupComponent },] }],
width: [{ type: HostBinding, args: ['style.min-width',] }, { type: HostBinding, args: ['style.flex-basis',] }],
styleClasses: [{ type: HostBinding, args: ['class',] }],
zIndex: [{ type: HostBinding, args: ['style.z-index',] }],
onMouseDown: [{ type: HostListener, args: ['mousedown', ['$event'],] }]
};
return IgxGridHeaderGroupComponent;
}());
export { IgxGridHeaderGroupComponent };
if (false) {
/**
* Gets the column of the header group.
* \@memberof IgxGridHeaderGroupComponent
* @type {?}
*/
IgxGridHeaderGroupComponent.prototype.column;
/**
* Gets the `id` of the grid in which the header group is stored.
* \@memberof IgxGridHeaderGroupComponent
* @type {?}
*/
IgxGridHeaderGroupComponent.prototype.gridID;
/**
* @hidden
* @type {?}
*/
IgxGridHeaderGroupComponent.prototype.headerCell;
/**
* @hidden
* @type {?}
*/
IgxGridHeaderGroupComponent.prototype.filterCell;
/**
* @hidden
* @type {?}
*/
IgxGridHeaderGroupComponent.prototype.children;
/**
* @type {?}
* @private
*/
IgxGridHeaderGroupComponent.prototype.cdr;
/** @type {?} */
IgxGridHeaderGroupComponent.prototype.gridAPI;
/**
* @type {?}
* @private
*/
IgxGridHeaderGroupComponent.prototype.element;
/** @type {?} */
IgxGridHeaderGroupComponent.prototype.colResizingService;
/** @type {?} */
IgxGridHeaderGroupComponent.prototype.filteringService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9ncmlkLWhlYWRlci1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLHVCQUF1QixFQUN2QixpQkFBaUIsRUFFakIsVUFBVSxFQUNWLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0lBRXBGLE9BQU8sR0FBRyxJQUFJOzs7O0FBS3BCO0lBMEpJLHFDQUFvQixHQUFzQixFQUN2QixPQUFxRSxFQUNwRSxPQUFtQixFQUNwQixrQkFBNEMsRUFDNUMsZ0JBQXFDO1FBSnBDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQThEO1FBQ3BFLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDcEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEwQjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO0lBQUksQ0FBQztJQWxIN0Qsc0JBRUksOENBQUs7UUFOVDs7O1dBR0c7Ozs7OztRQUNIO1lBR0ksT0FBTyxJQUFJLENB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QVMsU0FBQztvQkFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsNGhFQUFpRDtpQkFDcEQ7Ozs7Z0JBdkJHLGlCQUFpQjtnQkFPWixrQkFBa0I7Z0JBTHZCLFVBQVU7Z0JBT0wsd0JBQXdCO2dCQUh4QixtQkFBbUI7Ozt5QkF3QnZCLEtBQUs7eUJBT0wsS0FBSzs2QkFNTCxTQUFTLFNBQUMsc0JBQXNCOzZCQU1oQyxTQUFTLFNBQUMsNkJBQTZCOzJCQU12QyxZQUFZLFNBQUMsVUFBVSxDQUFDLGNBQU0sT0FBQSwyQkFBMkIsRUFBM0IsQ0FBMkIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFO3dCQU9qRyxXQUFXLFNBQUMsaUJBQWlCLGNBQzdCLFdBQVcsU0FBQyxrQkFBa0I7K0JBUzlCLFdBQVcsU0FBQyxPQUFPO3lCQXlCbkIsV0FBVyxTQUFDLGVBQWU7OEJBaUUzQixZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztJQWV6QyxrQ0FBQztDQUFBLEFBL0pELElBK0pDO1NBekpZLDJCQUEyQjs7Ozs7OztJQU1wQyw2Q0FDa0M7Ozs7OztJQU1sQyw2Q0FDc0I7Ozs7O0lBS3RCLGlEQUMwQzs7Ozs7SUFLMUMsaURBQ2lEOzs7OztJQUtqRCwrQ0FDd0Q7Ozs7O0lBb0g1QywwQ0FBOEI7O0lBQzlCLDhDQUE0RTs7Ozs7SUFDNUUsOENBQTJCOztJQUMzQix5REFBbUQ7O0lBQ25ELHVEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIGZvcndhcmRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlQ29tcG9uZW50LCBJR3JpZERhdGFCaW5kYWJsZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuL2dyaWQtY29sdW1uLXJlc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQnO1xuXG5jb25zdCBaX0lOREVYID0gOTk5OTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtaGVhZGVyLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2sge1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIG9mIHRoZSBoZWFkZXIgZ3JvdXAuXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGlkYCBvZiB0aGUgZ3JpZCBpbiB3aGljaCB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hHcmlkSGVhZGVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBoZWFkZXJDZWxsOiBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQpXG4gICAgcHVibGljIGZpbHRlckNlbGw6IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQpLCB7IHJlYWQ6IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi13aWR0aCcpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LWJhc2lzJylcbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0SGVhZGVyR3JvdXBXaWR0aCh0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3R5bGUgY2xhc3NlcyBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgc3R5bGVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ2lneC1ncmlkX190aGVhZC1pdGVtJyxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmhlYWRlckdyb3VwQ2xhc3Nlc1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHtcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLXBpbm5lZCc6IHRoaXMuaXNQaW5uZWQsXG4gICAgICAgICAgICAnaWd4LWdyaWRfX3RoLS1waW5uZWQtbGFzdCc6IHRoaXMuaXNMYXN0UGlubmVkLFxuICAgICAgICAgICAgJ2lneC1ncmlkX19kcmFnLWNvbC1oZWFkZXInOiB0aGlzLmlzSGVhZGVyRHJhZ2dlZCxcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLWZpbHRlcmluZyc6IHRoaXMuaXNGaWx0ZXJlZFxuICAgICAgICB9O1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNsYXNzTGlzdCkuZm9yRWFjaCgoW2NsYXNzTmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVmYXVsdENsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxuICAgIGdldCB6SW5kZXgoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4ucGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWl9JTkRFWCAtIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGdyaWQgb2YgdGhlIGhlYWRlciBncm91cC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGdyaWQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGJlbG9uZ3MgdG8gYSBjb2x1bW4gdGhhdCBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPT09IHRoaXMuY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZCBpbiB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIHBpbm5lZCBhcmVhLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNMYXN0UGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uaXNMYXN0UGlubmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZCBpbiBhIHBpbm5lZCBjb2x1bW4uXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBpc1Bpbm5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnBpbm5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBiZWxvbmdzIHRvIGEgY29sdW1uIHRoYXQgaXMgbW92ZWQuXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBpc0hlYWRlckRyYWdnZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZHJhZ2dlZENvbHVtbiA9PT0gIHRoaXMuY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uYWxsQ2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlRG93bihldmVudCk6IHZvaWQge1xuICAgICAgICAvLyBoYWNrIGZvciBwcmV2ZW50aW5nIHRleHQgc2VsZWN0aW9uIGluIElFIGFuZCBFZGdlIHdoaWxlIGRyYWdnaW5nIHRoZSByZXNpemVyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VDb21wb25lbnQgJiBJR3JpZERhdGFCaW5kYWJsZT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSkgeyB9XG59XG4iXX0=