UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

287 lines 22.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { MediaMatcher } from '@angular/cdk/layout'; import { Platform } from '@angular/cdk/platform'; import { isDevMode, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Input, NgZone, QueryList, ViewEncapsulation } from '@angular/core'; import { fromEvent, merge, Subject } from 'rxjs'; import { auditTime, startWith, takeUntil } from 'rxjs/operators'; import { responsiveMap, warn, Breakpoint, InputBoolean } from 'ng-zorro-antd/core'; import { NzDescriptionsItemComponent } from './nz-descriptions-item.component'; /** @type {?} */ var defaultColumnMap = { xxl: 3, xl: 3, lg: 3, md: 3, sm: 2, xs: 1 }; var NzDescriptionsComponent = /** @class */ (function () { function NzDescriptionsComponent(cdr, ngZone, mediaMatcher, platform) { this.cdr = cdr; this.ngZone = ngZone; this.mediaMatcher = mediaMatcher; this.platform = platform; this.nzBordered = false; this.nzColumn = defaultColumnMap; this.nzSize = 'default'; this.nzTitle = ''; this.itemMatrix = []; this.realColumn = 3; this.destroy$ = new Subject(); this.resize$ = new Subject(); } /** * @param {?} changes * @return {?} */ NzDescriptionsComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.nzColumn) { this.resize$.next(); } }; /** * @return {?} */ NzDescriptionsComponent.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; merge(this.items.changes.pipe(startWith(this.items), takeUntil(this.destroy$)), this.resize$) .pipe(takeUntil(this.destroy$)) .subscribe((/** * @return {?} */ function () { _this.prepareMatrix(); _this.cdr.markForCheck(); })); if (this.platform.isBrowser) { this.ngZone.runOutsideAngular((/** * @return {?} */ function () { fromEvent(window, 'resize') .pipe(auditTime(16), takeUntil(_this.destroy$)) .subscribe((/** * @return {?} */ function () { _this.ngZone.run((/** * @return {?} */ function () { _this.resize$.next(); })); })); })); } }; /** * @return {?} */ NzDescriptionsComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.destroy$.next(); this.destroy$.complete(); this.resize$.complete(); }; /** * Prepare the render matrix according to description items' spans. */ /** * Prepare the render matrix according to description items' spans. * @private * @return {?} */ NzDescriptionsComponent.prototype.prepareMatrix = /** * Prepare the render matrix according to description items' spans. * @private * @return {?} */ function () { /** @type {?} */ var currentRow = []; /** @type {?} */ var width = 0; /** @type {?} */ var column = (this.realColumn = this.getColumn()); /** @type {?} */ var items = this.items.toArray(); /** @type {?} */ var matrix = []; /** @type {?} */ var flushRow = (/** * @return {?} */ function () { matrix.push(currentRow); currentRow = []; width = 0; }); items.forEach((/** * @param {?} item * @return {?} */ function (item) { var title = item.nzTitle, content = item.content, span = item.nzSpan; currentRow.push({ title: title, content: content, span: span }); width += span; // If the last item make the row's length exceeds `nzColumn`, the last // item should take all the space left. This logic is implemented in the template. // Warn user about that. if (width >= column) { if (width > column && isDevMode()) { warn("\"nzColumn\" is " + column + " but we have row length " + width); } flushRow(); } })); if (currentRow.length) { flushRow(); } this.itemMatrix = matrix; }; /** * @private * @return {?} */ NzDescriptionsComponent.prototype.matchMedia = /** * @private * @return {?} */ function () { var _this = this; /** @type {?} */ var bp = Breakpoint.md; Object.keys(responsiveMap).map((/** * @param {?} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var castBP = (/** @type {?} */ (breakpoint)); /** @type {?} */ var matchBelow = _this.mediaMatcher.matchMedia(responsiveMap[castBP]).matches; if (matchBelow) { bp = castBP; } })); return bp; }; /** * @private * @return {?} */ NzDescriptionsComponent.prototype.getColumn = /** * @private * @return {?} */ function () { if (typeof this.nzColumn !== 'number') { return this.nzColumn[this.matchMedia()]; } return this.nzColumn; }; NzDescriptionsComponent.decorators = [ { type: Component, args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, selector: 'nz-descriptions', template: "<div *ngIf=\"nzTitle\"\n class=\"ant-descriptions-title\">\n <ng-container *nzStringTemplateOutlet=\"nzTitle\">{{ nzTitle }}</ng-container>\n</div>\n<div class=\"ant-descriptions-view\">\n <table>\n <tbody>\n <tr class=\"ant-descriptions-row\"\n *ngFor=\"let row of itemMatrix; let i = index\">\n <ng-container *ngFor=\"let item of row; let isLast = last\">\n <ng-container *ngIf=\"!nzBordered\">\n <td class=\"ant-descriptions-item\"\n [colSpan]=\"isLast ? (realColumn - (row.length - 1)) * 2 - 1 : item.span\">\n <span class=\"ant-descriptions-item-label\">{{ item.title }}</span>\n <span class=\"ant-descriptions-item-content\">\n <ng-template [ngTemplateOutlet]=\"item.content\"></ng-template>\n </span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"nzBordered\">\n <td class=\"ant-descriptions-item-label\"\n *nzStringTemplateOutlet=\"item.title\">{{ item.title }}</td>\n <td class=\"ant-descriptions-item-content\"\n [colSpan]=\"isLast ? (realColumn - (row.length - 1)) * 2 - 1 : item.span\">\n <ng-template [ngTemplateOutlet]=\"item.content\"></ng-template>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n </tbody>\n\n </table>\n</div>\n", exportAs: 'nzDescriptions', preserveWhitespaces: false, host: { class: 'ant-descriptions', '[class.bordered]': 'nzBordered', '[class.middle]': 'nzSize === "middle"', '[class.small]': 'nzSize === "small"' }, styles: ["\n nz-descriptions {\n display: block;\n }\n "] }] } ]; /** @nocollapse */ NzDescriptionsComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: NgZone }, { type: MediaMatcher }, { type: Platform } ]; }; NzDescriptionsComponent.propDecorators = { items: [{ type: ContentChildren, args: [NzDescriptionsItemComponent,] }], nzBordered: [{ type: Input }], nzColumn: [{ type: Input }], nzSize: [{ type: Input }], nzTitle: [{ type: Input }] }; tslib_1.__decorate([ InputBoolean(), tslib_1.__metadata("design:type", Object) ], NzDescriptionsComponent.prototype, "nzBordered", void 0); return NzDescriptionsComponent; }()); export { NzDescriptionsComponent }; if (false) { /** @type {?} */ NzDescriptionsComponent.prototype.items; /** @type {?} */ NzDescriptionsComponent.prototype.nzBordered; /** @type {?} */ NzDescriptionsComponent.prototype.nzColumn; /** @type {?} */ NzDescriptionsComponent.prototype.nzSize; /** @type {?} */ NzDescriptionsComponent.prototype.nzTitle; /** @type {?} */ NzDescriptionsComponent.prototype.itemMatrix; /** @type {?} */ NzDescriptionsComponent.prototype.realColumn; /** * @type {?} * @private */ NzDescriptionsComponent.prototype.destroy$; /** * @type {?} * @private */ NzDescriptionsComponent.prototype.resize$; /** * @type {?} * @private */ NzDescriptionsComponent.prototype.cdr; /** * @type {?} * @private */ NzDescriptionsComponent.prototype.ngZone; /** * @type {?} * @private */ NzDescriptionsComponent.prototype.mediaMatcher; /** * @type {?} * @private */ NzDescriptionsComponent.prototype.platform; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZGVzY3JpcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvZGVzY3JpcHRpb25zLyIsInNvdXJjZXMiOlsibnotZGVzY3JpcHRpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFDTCxTQUFTLEVBRVQsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUdULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztJQUV6RSxnQkFBZ0IsR0FBb0M7SUFDeEQsR0FBRyxFQUFFLENBQUM7SUFDTixFQUFFLEVBQUUsQ0FBQztJQUNMLEVBQUUsRUFBRSxDQUFDO0lBQ0wsRUFBRSxFQUFFLENBQUM7SUFDTCxFQUFFLEVBQUUsQ0FBQztJQUNMLEVBQUUsRUFBRSxDQUFDO0NBQ047QUFFRDtJQW9DRSxpQ0FDVSxHQUFzQixFQUN0QixNQUFjLEVBQ2QsWUFBMEIsRUFDMUIsUUFBa0I7UUFIbEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFoQkgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQyxhQUFRLEdBQTZDLGdCQUFnQixDQUFDO1FBQ3RFLFdBQU0sR0FBdUIsU0FBUyxDQUFDO1FBQ3ZDLFlBQU8sR0FBK0IsRUFBRSxDQUFDO1FBRWxELGVBQVUsR0FBc0MsRUFBRSxDQUFDO1FBRW5ELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFUCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQixZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU9uQyxDQUFDOzs7OztJQUVKLDZDQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7Ozs7SUFFRCxvREFBa0I7OztJQUFsQjtRQUFBLGlCQTRCQztRQTNCQyxLQUFLLENBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QixFQUNELElBQUksQ0FBQyxPQUFPLENBQ2I7YUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTOzs7UUFBQztZQUNULEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixLQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBQyxDQUFDO1FBRUwsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQjs7O1lBQUM7Z0JBQzVCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO3FCQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLFNBQVMsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO3FCQUNBLFNBQVM7OztnQkFBQztvQkFDVCxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7OztvQkFBQzt3QkFDZCxLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN0QixDQUFDLEVBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUMsQ0FBQztZQUNQLENBQUMsRUFBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7O0lBRUQsNkNBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSywrQ0FBYTs7Ozs7SUFBckI7O1lBQ00sVUFBVSxHQUFvQyxFQUFFOztZQUNoRCxLQUFLLEdBQUcsQ0FBQzs7WUFFUCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7WUFDN0MsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFOztZQUM1QixNQUFNLEdBQXNDLEVBQUU7O1lBQzlDLFFBQVE7OztRQUFHO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QixVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUE7UUFFRCxLQUFLLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsSUFBSTtZQUNSLElBQUEsb0JBQWMsRUFBRSxzQkFBTyxFQUFFLGtCQUFZO1lBRTdDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQUEsRUFBRSxPQUFPLFNBQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxDQUFDLENBQUM7WUFDMUMsS0FBSyxJQUFJLElBQUksQ0FBQztZQUVkLHNFQUFzRTtZQUN0RSxrRkFBa0Y7WUFDbEYsd0JBQXdCO1lBQ3hCLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRTtnQkFDbkIsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFNBQVMsRUFBRSxFQUFFO29CQUNqQyxJQUFJLENBQUMscUJBQWlCLE1BQU0sZ0NBQTJCLEtBQU8sQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxRQUFRLEVBQUUsQ0FBQzthQUNaO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsUUFBUSxFQUFFLENBQUM7U0FDWjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzNCLENBQUM7Ozs7O0lBRU8sNENBQVU7Ozs7SUFBbEI7UUFBQSxpQkFZQzs7WUFYSyxFQUFFLEdBQWUsVUFBVSxDQUFDLEVBQUU7UUFFbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQyxVQUFrQjs7Z0JBQzFDLE1BQU0sR0FBRyxtQkFBQSxVQUFVLEVBQWM7O2dCQUNqQyxVQUFVLEdBQUcsS0FBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztZQUM5RSxJQUFJLFVBQVUsRUFBRTtnQkFDZCxFQUFFLEdBQUcsTUFBTSxDQUFDO2FBQ2I7UUFDSCxDQUFDLEVBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7Ozs7SUFFTywyQ0FBUzs7OztJQUFqQjtRQUNFLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzs7Z0JBakpGLFNBQVMsU0FBQztvQkFDVCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLHU0Q0FBK0M7b0JBQy9DLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsa0JBQWtCO3dCQUN6QixrQkFBa0IsRUFBRSxZQUFZO3dCQUNoQyxnQkFBZ0IsRUFBRSxxQkFBcUI7d0JBQ3ZDLGVBQWUsRUFBRSxvQkFBb0I7cUJBQ3RDOzZCQUVDLG1FQUlDO2lCQUVKOzs7O2dCQWhEQyxpQkFBaUI7Z0JBSWpCLE1BQU07Z0JBVkMsWUFBWTtnQkFDWixRQUFROzs7d0JBdURkLGVBQWUsU0FBQywyQkFBMkI7NkJBRTNDLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLOzBCQUNMLEtBQUs7O0lBSG1CO1FBQWYsWUFBWSxFQUFFOzsrREFBb0I7SUEwSDlDLDhCQUFDO0NBQUEsQUFsSkQsSUFrSkM7U0E3SFksdUJBQXVCOzs7SUFDbEMsd0NBQTRGOztJQUU1Riw2Q0FBNEM7O0lBQzVDLDJDQUErRTs7SUFDL0UseUNBQWdEOztJQUNoRCwwQ0FBa0Q7O0lBRWxELDZDQUFtRDs7SUFFbkQsNkNBQWU7Ozs7O0lBRWYsMkNBQXVDOzs7OztJQUN2QywwQ0FBc0M7Ozs7O0lBR3BDLHNDQUE4Qjs7Ozs7SUFDOUIseUNBQXNCOzs7OztJQUN0QiwrQ0FBa0M7Ozs7O0lBQ2xDLDJDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIGlzRGV2TW9kZSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgcmVzcG9uc2l2ZU1hcCwgd2FybiwgQnJlYWtwb2ludCwgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlJztcbmltcG9ydCB7IE56RGVzY3JpcHRpb25zSXRlbVJlbmRlclByb3BzLCBOekRlc2NyaXB0aW9uc1NpemUgfSBmcm9tICcuL256LWRlc2NyaXB0aW9ucy1kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBOekRlc2NyaXB0aW9uc0l0ZW1Db21wb25lbnQgfSBmcm9tICcuL256LWRlc2NyaXB0aW9ucy1pdGVtLmNvbXBvbmVudCc7XG5cbmNvbnN0IGRlZmF1bHRDb2x1bW5NYXA6IHsgW2tleSBpbiBCcmVha3BvaW50XTogbnVtYmVyIH0gPSB7XG4gIHh4bDogMyxcbiAgeGw6IDMsXG4gIGxnOiAzLFxuICBtZDogMyxcbiAgc206IDIsXG4gIHhzOiAxXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHNlbGVjdG9yOiAnbnotZGVzY3JpcHRpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL256LWRlc2NyaXB0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIGV4cG9ydEFzOiAnbnpEZXNjcmlwdGlvbnMnLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYW50LWRlc2NyaXB0aW9ucycsXG4gICAgJ1tjbGFzcy5ib3JkZXJlZF0nOiAnbnpCb3JkZXJlZCcsXG4gICAgJ1tjbGFzcy5taWRkbGVdJzogJ256U2l6ZSA9PT0gXCJtaWRkbGVcIicsXG4gICAgJ1tjbGFzcy5zbWFsbF0nOiAnbnpTaXplID09PSBcInNtYWxsXCInXG4gIH0sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIG56LWRlc2NyaXB0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOekRlc2NyaXB0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgQENvbnRlbnRDaGlsZHJlbihOekRlc2NyaXB0aW9uc0l0ZW1Db21wb25lbnQpIGl0ZW1zOiBRdWVyeUxpc3Q8TnpEZXNjcmlwdGlvbnNJdGVtQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpCb3JkZXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBuekNvbHVtbjogbnVtYmVyIHwgeyBba2V5IGluIEJyZWFrcG9pbnRdOiBudW1iZXIgfSA9IGRlZmF1bHRDb2x1bW5NYXA7XG4gIEBJbnB1dCgpIG56U2l6ZTogTnpEZXNjcmlwdGlvbnNTaXplID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBuelRpdGxlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPiA9ICcnO1xuXG4gIGl0ZW1NYXRyaXg6IE56RGVzY3JpcHRpb25zSXRlbVJlbmRlclByb3BzW11bXSA9IFtdO1xuXG4gIHJlYWxDb2x1bW4gPSAzO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlc2l6ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5uekNvbHVtbikge1xuICAgICAgdGhpcy5yZXNpemUkLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLml0ZW1zLmNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuaXRlbXMpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICksXG4gICAgICB0aGlzLnJlc2l6ZSRcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5wcmVwYXJlTWF0cml4KCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBhdWRpdFRpbWUoMTYpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNpemUkLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucmVzaXplJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgdGhlIHJlbmRlciBtYXRyaXggYWNjb3JkaW5nIHRvIGRlc2NyaXB0aW9uIGl0ZW1zJyBzcGFucy5cbiAgICovXG4gIHByaXZhdGUgcHJlcGFyZU1hdHJpeCgpOiB2b2lkIHtcbiAgICBsZXQgY3VycmVudFJvdzogTnpEZXNjcmlwdGlvbnNJdGVtUmVuZGVyUHJvcHNbXSA9IFtdO1xuICAgIGxldCB3aWR0aCA9IDA7XG5cbiAgICBjb25zdCBjb2x1bW4gPSAodGhpcy5yZWFsQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oKSk7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcbiAgICBjb25zdCBtYXRyaXg6IE56RGVzY3JpcHRpb25zSXRlbVJlbmRlclByb3BzW11bXSA9IFtdO1xuICAgIGNvbnN0IGZsdXNoUm93ID0gKCkgPT4ge1xuICAgICAgbWF0cml4LnB1c2goY3VycmVudFJvdyk7XG4gICAgICBjdXJyZW50Um93ID0gW107XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfTtcblxuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCB7IG56VGl0bGU6IHRpdGxlLCBjb250ZW50LCBuelNwYW46IHNwYW4gfSA9IGl0ZW07XG5cbiAgICAgIGN1cnJlbnRSb3cucHVzaCh7IHRpdGxlLCBjb250ZW50LCBzcGFuIH0pO1xuICAgICAgd2lkdGggKz0gc3BhbjtcblxuICAgICAgLy8gSWYgdGhlIGxhc3QgaXRlbSBtYWtlIHRoZSByb3cncyBsZW5ndGggZXhjZWVkcyBgbnpDb2x1bW5gLCB0aGUgbGFzdFxuICAgICAgLy8gaXRlbSBzaG91bGQgdGFrZSBhbGwgdGhlIHNwYWNlIGxlZnQuIFRoaXMgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICAgICAgLy8gV2FybiB1c2VyIGFib3V0IHRoYXQuXG4gICAgICBpZiAod2lkdGggPj0gY29sdW1uKSB7XG4gICAgICAgIGlmICh3aWR0aCA+IGNvbHVtbiAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIHdhcm4oYFwibnpDb2x1bW5cIiBpcyAke2NvbHVtbn0gYnV0IHdlIGhhdmUgcm93IGxlbmd0aCAke3dpZHRofWApO1xuICAgICAgICB9XG4gICAgICAgIGZsdXNoUm93KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY3VycmVudFJvdy5sZW5ndGgpIHtcbiAgICAgIGZsdXNoUm93KCk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtTWF0cml4ID0gbWF0cml4O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaE1lZGlhKCk6IEJyZWFrcG9pbnQge1xuICAgIGxldCBicDogQnJlYWtwb2ludCA9IEJyZWFrcG9pbnQubWQ7XG5cbiAgICBPYmplY3Qua2V5cyhyZXNwb25zaXZlTWFwKS5tYXAoKGJyZWFrcG9pbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgY2FzdEJQID0gYnJlYWtwb2ludCBhcyBCcmVha3BvaW50O1xuICAgICAgY29uc3QgbWF0Y2hCZWxvdyA9IHRoaXMubWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEocmVzcG9uc2l2ZU1hcFtjYXN0QlBdKS5tYXRjaGVzO1xuICAgICAgaWYgKG1hdGNoQmVsb3cpIHtcbiAgICAgICAgYnAgPSBjYXN0QlA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYnA7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbigpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdGhpcy5uekNvbHVtbiAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLm56Q29sdW1uW3RoaXMubWF0Y2hNZWRpYSgpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5uekNvbHVtbjtcbiAgfVxufVxuIl19