ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
193 lines • 18 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: option-container.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @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 { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
var NzOptionContainerComponent = /** @class */ (function () {
function NzOptionContainerComponent() {
this.notFoundContent = undefined;
this.menuItemSelectedIcon = null;
this.dropdownRender = null;
this.activatedValue = null;
this.listOfSelectedValue = [];
this.mode = 'default';
this.matchWidth = true;
this.itemSize = 32;
this.maxItemLength = 8;
this.listOfContainerItem = [];
this.itemClick = new EventEmitter();
this.scrollToBottom = new EventEmitter();
this.scrolledIndex = 0;
}
/**
* @param {?} value
* @return {?}
*/
NzOptionContainerComponent.prototype.onItemClick = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.itemClick.emit(value);
};
/**
* @param {?} value
* @return {?}
*/
NzOptionContainerComponent.prototype.onItemHover = /**
* @param {?} value
* @return {?}
*/
function (value) {
// TODO: keydown.enter won't activate this value
this.activatedValue = value;
};
/**
* @param {?} _index
* @param {?} option
* @return {?}
*/
NzOptionContainerComponent.prototype.trackValue = /**
* @param {?} _index
* @param {?} option
* @return {?}
*/
function (_index, option) {
return option.key;
};
/**
* @param {?} index
* @return {?}
*/
NzOptionContainerComponent.prototype.onScrolledIndexChange = /**
* @param {?} index
* @return {?}
*/
function (index) {
this.scrolledIndex = index;
if (index === this.listOfContainerItem.length - this.maxItemLength) {
this.scrollToBottom.emit();
}
};
/**
* @return {?}
*/
NzOptionContainerComponent.prototype.scrollToActivatedValue = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var index = this.listOfContainerItem.findIndex((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.compareWith(item.key, _this.activatedValue); }));
if (index < this.scrolledIndex || index >= this.scrolledIndex + this.maxItemLength) {
this.cdkVirtualScrollViewport.scrollToIndex(index || 0);
}
};
/**
* @param {?} changes
* @return {?}
*/
NzOptionContainerComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
var listOfContainerItem = changes.listOfContainerItem, activatedValue = changes.activatedValue;
if (listOfContainerItem || activatedValue) {
this.scrollToActivatedValue();
}
};
/**
* @return {?}
*/
NzOptionContainerComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () { return _this.scrollToActivatedValue(); }));
};
NzOptionContainerComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-option-container',
exportAs: 'nzOptionContainer',
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
preserveWhitespaces: false,
template: "\n <div>\n <div *ngIf=\"listOfContainerItem.length === 0\" class=\"ant-select-item-empty\">\n <nz-embed-empty nzComponentName=\"select\" [specificContent]=\"notFoundContent\"></nz-embed-empty>\n </div>\n <cdk-virtual-scroll-viewport\n [class.full-width]=\"!matchWidth\"\n [itemSize]=\"itemSize\"\n [maxBufferPx]=\"itemSize * maxItemLength\"\n [minBufferPx]=\"itemSize * maxItemLength\"\n (scrolledIndexChange)=\"onScrolledIndexChange($event)\"\n [style.height.px]=\"listOfContainerItem.length * itemSize\"\n [style.max-height.px]=\"itemSize * maxItemLength\"\n >\n <ng-container *cdkVirtualFor=\"let item of listOfContainerItem; trackBy: trackValue\">\n <ng-container [ngSwitch]=\"item.type\">\n <nz-option-item-group *ngSwitchCase=\"'group'\" [nzLabel]=\"item.groupLabel\"></nz-option-item-group>\n <nz-option-item\n *ngSwitchCase=\"'item'\"\n [icon]=\"menuItemSelectedIcon\"\n [customContent]=\"item.nzCustomContent\"\n [template]=\"item.template\"\n [grouped]=\"!!item.groupLabel\"\n [disabled]=\"item.nzDisabled\"\n [showState]=\"mode === 'tags' || mode === 'multiple'\"\n [label]=\"item.nzLabel\"\n [compareWith]=\"compareWith\"\n [activatedValue]=\"activatedValue\"\n [listOfSelectedValue]=\"listOfSelectedValue\"\n [value]=\"item.nzValue\"\n (itemHover)=\"onItemHover($event)\"\n (itemClick)=\"onItemClick($event)\"\n ></nz-option-item>\n </ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n <ng-template [ngTemplateOutlet]=\"dropdownRender\"></ng-template>\n </div>\n ",
host: {
'[class.ant-select-dropdown]': 'true'
}
}] }
];
NzOptionContainerComponent.propDecorators = {
notFoundContent: [{ type: Input }],
menuItemSelectedIcon: [{ type: Input }],
dropdownRender: [{ type: Input }],
activatedValue: [{ type: Input }],
listOfSelectedValue: [{ type: Input }],
compareWith: [{ type: Input }],
mode: [{ type: Input }],
matchWidth: [{ type: Input }],
itemSize: [{ type: Input }],
maxItemLength: [{ type: Input }],
listOfContainerItem: [{ type: Input }],
itemClick: [{ type: Output }],
scrollToBottom: [{ type: Output }],
cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport, { static: true },] }]
};
return NzOptionContainerComponent;
}());
export { NzOptionContainerComponent };
if (false) {
/** @type {?} */
NzOptionContainerComponent.prototype.notFoundContent;
/** @type {?} */
NzOptionContainerComponent.prototype.menuItemSelectedIcon;
/** @type {?} */
NzOptionContainerComponent.prototype.dropdownRender;
/** @type {?} */
NzOptionContainerComponent.prototype.activatedValue;
/** @type {?} */
NzOptionContainerComponent.prototype.listOfSelectedValue;
/** @type {?} */
NzOptionContainerComponent.prototype.compareWith;
/** @type {?} */
NzOptionContainerComponent.prototype.mode;
/** @type {?} */
NzOptionContainerComponent.prototype.matchWidth;
/** @type {?} */
NzOptionContainerComponent.prototype.itemSize;
/** @type {?} */
NzOptionContainerComponent.prototype.maxItemLength;
/** @type {?} */
NzOptionContainerComponent.prototype.listOfContainerItem;
/** @type {?} */
NzOptionContainerComponent.prototype.itemClick;
/** @type {?} */
NzOptionContainerComponent.prototype.scrollToBottom;
/** @type {?} */
NzOptionContainerComponent.prototype.cdkVirtualScrollViewport;
/**
* @type {?}
* @private
*/
NzOptionContainerComponent.prototype.scrolledIndex;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkL3NlbGVjdC8iLCJzb3VyY2VzIjpbIm9wdGlvbi1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFJdkI7SUFBQTtRQWtEVyxvQkFBZSxHQUFnRCxTQUFTLENBQUM7UUFDekUseUJBQW9CLEdBQWtDLElBQUksQ0FBQztRQUMzRCxtQkFBYyxHQUFrQyxJQUFJLENBQUM7UUFDckQsbUJBQWMsR0FBcUIsSUFBSSxDQUFDO1FBQ3hDLHdCQUFtQixHQUFnQixFQUFFLENBQUM7UUFFdEMsU0FBSSxHQUFxQixTQUFTLENBQUM7UUFDbkMsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsd0JBQW1CLEdBQTRCLEVBQUUsQ0FBQztRQUN4QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUMxQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckQsa0JBQWEsR0FBRyxDQUFDLENBQUM7SUFzQzVCLENBQUM7Ozs7O0lBcENDLGdEQUFXOzs7O0lBQVgsVUFBWSxLQUFnQjtRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7OztJQUVELGdEQUFXOzs7O0lBQVgsVUFBWSxLQUFnQjtRQUMxQixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQzs7Ozs7O0lBRUQsK0NBQVU7Ozs7O0lBQVYsVUFBVyxNQUFjLEVBQUUsTUFBNkI7UUFDdEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRUQsMERBQXFCOzs7O0lBQXJCLFVBQXNCLEtBQWE7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDOzs7O0lBRUQsMkRBQXNCOzs7SUFBdEI7UUFBQSxpQkFLQzs7WUFKTyxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLElBQUksSUFBSSxPQUFBLEtBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFJLENBQUMsY0FBYyxDQUFDLEVBQS9DLENBQStDLEVBQUM7UUFDekcsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxnREFBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDeEIsSUFBQSxpREFBbUIsRUFBRSx1Q0FBYztRQUMzQyxJQUFJLG1CQUFtQixJQUFJLGNBQWMsRUFBRTtZQUN6QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUMvQjtJQUNILENBQUM7Ozs7SUFDRCxvREFBZTs7O0lBQWY7UUFBQSxpQkFFQztRQURDLFVBQVU7OztRQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBN0IsQ0FBNkIsRUFBQyxDQUFDO0lBQ2xELENBQUM7O2dCQXJHRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixRQUFRLEVBQUUsMHlEQXNDVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osNkJBQTZCLEVBQUUsTUFBTTtxQkFDdEM7aUJBQ0Y7OztrQ0FFRSxLQUFLO3VDQUNMLEtBQUs7aUNBQ0wsS0FBSztpQ0FDTCxLQUFLO3NDQUNMLEtBQUs7OEJBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7MkJBQ0wsS0FBSztnQ0FDTCxLQUFLO3NDQUNMLEtBQUs7NEJBQ0wsTUFBTTtpQ0FDTixNQUFNOzJDQUNOLFNBQVMsU0FBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0lBdUN2RCxpQ0FBQztDQUFBLEFBdEdELElBc0dDO1NBckRZLDBCQUEwQjs7O0lBQ3JDLHFEQUFrRjs7SUFDbEYsMERBQW9FOztJQUNwRSxvREFBOEQ7O0lBQzlELG9EQUFpRDs7SUFDakQseURBQStDOztJQUMvQyxpREFBZ0U7O0lBQ2hFLDBDQUE0Qzs7SUFDNUMsZ0RBQTJCOztJQUMzQiw4Q0FBdUI7O0lBQ3ZCLG1EQUEyQjs7SUFDM0IseURBQTJEOztJQUMzRCwrQ0FBNkQ7O0lBQzdELG9EQUE2RDs7SUFDN0QsOERBQTBHOzs7OztJQUMxRyxtREFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgTnpTZWxlY3RJdGVtSW50ZXJmYWNlLCBOelNlbGVjdE1vZGVUeXBlIH0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei1vcHRpb24tY29udGFpbmVyJyxcbiAgZXhwb3J0QXM6ICduek9wdGlvbkNvbnRhaW5lcicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImxpc3RPZkNvbnRhaW5lckl0ZW0ubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJhbnQtc2VsZWN0LWl0ZW0tZW1wdHlcIj5cbiAgICAgICAgPG56LWVtYmVkLWVtcHR5IG56Q29tcG9uZW50TmFtZT1cInNlbGVjdFwiIFtzcGVjaWZpY0NvbnRlbnRdPVwibm90Rm91bmRDb250ZW50XCI+PC9uei1lbWJlZC1lbXB0eT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBbY2xhc3MuZnVsbC13aWR0aF09XCIhbWF0Y2hXaWR0aFwiXG4gICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgIFttYXhCdWZmZXJQeF09XCJpdGVtU2l6ZSAqIG1heEl0ZW1MZW5ndGhcIlxuICAgICAgICBbbWluQnVmZmVyUHhdPVwiaXRlbVNpemUgKiBtYXhJdGVtTGVuZ3RoXCJcbiAgICAgICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwib25TY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImxpc3RPZkNvbnRhaW5lckl0ZW0ubGVuZ3RoICogaXRlbVNpemVcIlxuICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJpdGVtU2l6ZSAqIG1heEl0ZW1MZW5ndGhcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgbGlzdE9mQ29udGFpbmVySXRlbTsgdHJhY2tCeTogdHJhY2tWYWx1ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIml0ZW0udHlwZVwiPlxuICAgICAgICAgICAgPG56LW9wdGlvbi1pdGVtLWdyb3VwICpuZ1N3aXRjaENhc2U9XCInZ3JvdXAnXCIgW256TGFiZWxdPVwiaXRlbS5ncm91cExhYmVsXCI+PC9uei1vcHRpb24taXRlbS1ncm91cD5cbiAgICAgICAgICAgIDxuei1vcHRpb24taXRlbVxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2l0ZW0nXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwibWVudUl0ZW1TZWxlY3RlZEljb25cIlxuICAgICAgICAgICAgICBbY3VzdG9tQ29udGVudF09XCJpdGVtLm56Q3VzdG9tQ29udGVudFwiXG4gICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJpdGVtLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2dyb3VwZWRdPVwiISFpdGVtLmdyb3VwTGFiZWxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5uekRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW3Nob3dTdGF0ZV09XCJtb2RlID09PSAndGFncycgfHwgbW9kZSA9PT0gJ211bHRpcGxlJ1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLm56TGFiZWxcIlxuICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZVdpdGhcIlxuICAgICAgICAgICAgICBbYWN0aXZhdGVkVmFsdWVdPVwiYWN0aXZhdGVkVmFsdWVcIlxuICAgICAgICAgICAgICBbbGlzdE9mU2VsZWN0ZWRWYWx1ZV09XCJsaXN0T2ZTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0ubnpWYWx1ZVwiXG4gICAgICAgICAgICAgIChpdGVtSG92ZXIpPVwib25JdGVtSG92ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChpdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9uei1vcHRpb24taXRlbT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkcm9wZG93blJlbmRlclwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmFudC1zZWxlY3QtZHJvcGRvd25dJzogJ3RydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTnpPcHRpb25Db250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBub3RGb3VuZENvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPE56U2FmZUFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIG1lbnVJdGVtU2VsZWN0ZWRJY29uOiBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGRyb3Bkb3duUmVuZGVyOiBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFjdGl2YXRlZFZhbHVlOiBOelNhZmVBbnkgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbGlzdE9mU2VsZWN0ZWRWYWx1ZTogTnpTYWZlQW55W10gPSBbXTtcbiAgQElucHV0KCkgY29tcGFyZVdpdGg6IChvMTogTnpTYWZlQW55LCBvMjogTnpTYWZlQW55KSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBtb2RlOiBOelNlbGVjdE1vZGVUeXBlID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBtYXRjaFdpZHRoID0gdHJ1ZTtcbiAgQElucHV0KCkgaXRlbVNpemUgPSAzMjtcbiAgQElucHV0KCkgbWF4SXRlbUxlbmd0aCA9IDg7XG4gIEBJbnB1dCgpIGxpc3RPZkNvbnRhaW5lckl0ZW06IE56U2VsZWN0SXRlbUludGVyZmFjZVtdID0gW107XG4gIEBPdXRwdXQoKSByZWFkb25seSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE56U2FmZUFueT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNjcm9sbFRvQm90dG9tID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IHRydWUgfSkgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gIHByaXZhdGUgc2Nyb2xsZWRJbmRleCA9IDA7XG5cbiAgb25JdGVtQ2xpY2sodmFsdWU6IE56U2FmZUFueSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25JdGVtSG92ZXIodmFsdWU6IE56U2FmZUFueSk6IHZvaWQge1xuICAgIC8vIFRPRE86IGtleWRvd24uZW50ZXIgd29uJ3QgYWN0aXZhdGUgdGhpcyB2YWx1ZVxuICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHRyYWNrVmFsdWUoX2luZGV4OiBudW1iZXIsIG9wdGlvbjogTnpTZWxlY3RJdGVtSW50ZXJmYWNlKTogTnpTYWZlQW55IHtcbiAgICByZXR1cm4gb3B0aW9uLmtleTtcbiAgfVxuXG4gIG9uU2Nyb2xsZWRJbmRleENoYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxlZEluZGV4ID0gaW5kZXg7XG4gICAgaWYgKGluZGV4ID09PSB0aGlzLmxpc3RPZkNvbnRhaW5lckl0ZW0ubGVuZ3RoIC0gdGhpcy5tYXhJdGVtTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb0FjdGl2YXRlZFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0T2ZDb250YWluZXJJdGVtLmZpbmRJbmRleChpdGVtID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbS5rZXksIHRoaXMuYWN0aXZhdGVkVmFsdWUpKTtcbiAgICBpZiAoaW5kZXggPCB0aGlzLnNjcm9sbGVkSW5kZXggfHwgaW5kZXggPj0gdGhpcy5zY3JvbGxlZEluZGV4ICsgdGhpcy5tYXhJdGVtTGVuZ3RoKSB7XG4gICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4IHx8IDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGxpc3RPZkNvbnRhaW5lckl0ZW0sIGFjdGl2YXRlZFZhbHVlIH0gPSBjaGFuZ2VzO1xuICAgIGlmIChsaXN0T2ZDb250YWluZXJJdGVtIHx8IGFjdGl2YXRlZFZhbHVlKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvQWN0aXZhdGVkVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0FjdGl2YXRlZFZhbHVlKCkpO1xuICB9XG59XG4iXX0=