ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
173 lines • 18.1 kB
JavaScript
/**
* 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 { NgForOf, NgIf } from '@angular/common';
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { NzOutletModule } from 'ng-zorro-antd/core/outlet';
import { NzDropDownDirective, NzDropdownMenuComponent } from 'ng-zorro-antd/dropdown';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzMenuModule } from 'ng-zorro-antd/menu';
import { NzTabAddButtonComponent } from './tab-add-button.component';
import * as i0 from "@angular/core";
import * as i1 from "ng-zorro-antd/icon";
import * as i2 from "ng-zorro-antd/core/outlet";
import * as i3 from "ng-zorro-antd/menu";
export class NzTabNavOperationComponent {
constructor(cdr, elementRef) {
this.cdr = cdr;
this.elementRef = elementRef;
this.items = [];
this.addable = false;
this.addIcon = 'plus';
this.addClicked = new EventEmitter();
this.selected = new EventEmitter();
this.menuOpened = false;
this.element = this.elementRef.nativeElement;
}
onSelect(item) {
if (!item.disabled) {
// ignore nzCanDeactivate
item.tab.nzClick.emit();
this.selected.emit(item);
}
}
onContextmenu(item, e) {
if (!item.disabled) {
item.tab.nzContextmenu.emit(e);
}
}
showItems() {
clearTimeout(this.closeAnimationWaitTimeoutId);
this.menuOpened = true;
this.cdr.markForCheck();
}
menuVisChange(visible) {
if (!visible) {
this.closeAnimationWaitTimeoutId = setTimeout(() => {
this.menuOpened = false;
this.cdr.markForCheck();
}, 150);
}
}
getElementWidth() {
return this.element?.offsetWidth || 0;
}
getElementHeight() {
return this.element?.offsetHeight || 0;
}
ngOnDestroy() {
clearTimeout(this.closeAnimationWaitTimeoutId);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: NzTabNavOperationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: NzTabNavOperationComponent, isStandalone: true, selector: "nz-tab-nav-operation", inputs: { items: "items", addable: "addable", addIcon: "addIcon" }, outputs: { addClicked: "addClicked", selected: "selected" }, host: { properties: { "class.ant-tabs-nav-operations-hidden": "items.length === 0" }, classAttribute: "ant-tabs-nav-operations" }, exportAs: ["nzTabNavOperation"], ngImport: i0, template: `
<button
nz-dropdown
class="ant-tabs-nav-more"
type="button"
tabindex="-1"
aria-hidden="true"
nzOverlayClassName="nz-tabs-dropdown"
#dropdownTrigger="nzDropdown"
[nzDropdownMenu]="menu"
[nzOverlayStyle]="{ minWidth: '46px' }"
[nzMatchWidthElement]="null"
(nzVisibleChange)="menuVisChange($event)"
(mouseenter)="showItems()"
>
<span nz-icon nzType="ellipsis"></span>
</button>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu *ngIf="menuOpened">
<li
nz-menu-item
*ngFor="let item of items"
class="ant-tabs-dropdown-menu-item"
[class.ant-tabs-dropdown-menu-item-disabled]="item.disabled"
[nzSelected]="item.active"
[nzDisabled]="item.disabled"
(click)="onSelect(item)"
(contextmenu)="onContextmenu(item, $event)"
>
<ng-container *nzStringTemplateOutlet="item.tab.label; context: { visible: false }">
{{ item.tab.label }}
</ng-container>
</li>
</ul>
</nz-dropdown-menu>
<button *ngIf="addable" nz-tab-add-button [addIcon]="addIcon" (click)="addClicked.emit()"></button>
`, isInline: true, dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: NzOutletModule }, { kind: "directive", type: i2.NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }, { kind: "component", type: NzTabAddButtonComponent, selector: "nz-tab-add-button, button[nz-tab-add-button]", inputs: ["addIcon"] }, { kind: "component", type: NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "ngmodule", type: NzMenuModule }, { kind: "directive", type: i3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: NzTabNavOperationComponent, decorators: [{
type: Component,
args: [{
selector: 'nz-tab-nav-operation',
exportAs: 'nzTabNavOperation',
preserveWhitespaces: false,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
template: `
<button
nz-dropdown
class="ant-tabs-nav-more"
type="button"
tabindex="-1"
aria-hidden="true"
nzOverlayClassName="nz-tabs-dropdown"
#dropdownTrigger="nzDropdown"
[nzDropdownMenu]="menu"
[nzOverlayStyle]="{ minWidth: '46px' }"
[nzMatchWidthElement]="null"
(nzVisibleChange)="menuVisChange($event)"
(mouseenter)="showItems()"
>
<span nz-icon nzType="ellipsis"></span>
</button>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu *ngIf="menuOpened">
<li
nz-menu-item
*ngFor="let item of items"
class="ant-tabs-dropdown-menu-item"
[class.ant-tabs-dropdown-menu-item-disabled]="item.disabled"
[nzSelected]="item.active"
[nzDisabled]="item.disabled"
(click)="onSelect(item)"
(contextmenu)="onContextmenu(item, $event)"
>
<ng-container *nzStringTemplateOutlet="item.tab.label; context: { visible: false }">
{{ item.tab.label }}
</ng-container>
</li>
</ul>
</nz-dropdown-menu>
<button *ngIf="addable" nz-tab-add-button [addIcon]="addIcon" (click)="addClicked.emit()"></button>
`,
host: {
class: 'ant-tabs-nav-operations',
'[class.ant-tabs-nav-operations-hidden]': 'items.length === 0'
},
imports: [
NzIconModule,
NgIf,
NgForOf,
NzOutletModule,
NzTabAddButtonComponent,
NzDropdownMenuComponent,
NzMenuModule,
NzDropDownDirective
],
standalone: true
}]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { items: [{
type: Input
}], addable: [{
type: Input
}], addIcon: [{
type: Input
}], addClicked: [{
type: Output
}], selected: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdi1vcGVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy90YWJzL3RhYi1uYXYtb3BlcmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUE4RHJFLE1BQU0sT0FBTywwQkFBMEI7SUFXckMsWUFDUyxHQUFzQixFQUNyQixVQUFtQztRQURwQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQVpwQyxVQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBb0MsTUFBTSxDQUFDO1FBRXhDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUV4RSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBT2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUEyQixFQUFFLENBQWE7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxTQUFTO1FBQ1AsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQjtRQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsMkJBQTJCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7OEdBeERVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHFYQXJEM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DVCwyREFNQyxZQUFZLGtOQUNaLElBQUksNkZBQ0osT0FBTyxrSEFDUCxjQUFjLGlQQUNkLHVCQUF1Qiw4R0FDdkIsdUJBQXVCLDBGQUN2QixZQUFZLDhiQUNaLG1CQUFtQjs7MkZBSVYsMEJBQTBCO2tCQTNEdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUO29CQUNELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUseUJBQXlCO3dCQUNoQyx3Q0FBd0MsRUFBRSxvQkFBb0I7cUJBQy9EO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxjQUFjO3dCQUNkLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QixZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEI7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOytHQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVhLFVBQVU7c0JBQTVCLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE56T3V0bGV0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL291dGxldCc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgTnpEcm9wRG93bkRpcmVjdGl2ZSwgTnpEcm9wZG93bk1lbnVDb21wb25lbnQgfSBmcm9tICduZy16b3Jyby1hbnRkL2Ryb3Bkb3duJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5pbXBvcnQgeyBOek1lbnVNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL21lbnUnO1xuXG5pbXBvcnQgeyBOelRhYkFkZEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFiLWFkZC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE56VGFiTmF2SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vdGFiLW5hdi1pdGVtLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LXRhYi1uYXYtb3BlcmF0aW9uJyxcbiAgZXhwb3J0QXM6ICduelRhYk5hdk9wZXJhdGlvbicsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YnV0dG9uXG4gICAgICBuei1kcm9wZG93blxuICAgICAgY2xhc3M9XCJhbnQtdGFicy1uYXYtbW9yZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIG56T3ZlcmxheUNsYXNzTmFtZT1cIm56LXRhYnMtZHJvcGRvd25cIlxuICAgICAgI2Ryb3Bkb3duVHJpZ2dlcj1cIm56RHJvcGRvd25cIlxuICAgICAgW256RHJvcGRvd25NZW51XT1cIm1lbnVcIlxuICAgICAgW256T3ZlcmxheVN0eWxlXT1cInsgbWluV2lkdGg6ICc0NnB4JyB9XCJcbiAgICAgIFtuek1hdGNoV2lkdGhFbGVtZW50XT1cIm51bGxcIlxuICAgICAgKG56VmlzaWJsZUNoYW5nZSk9XCJtZW51VmlzQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd0l0ZW1zKClcIlxuICAgID5cbiAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiZWxsaXBzaXNcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPG56LWRyb3Bkb3duLW1lbnUgI21lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxuICAgICAgPHVsIG56LW1lbnUgKm5nSWY9XCJtZW51T3BlbmVkXCI+XG4gICAgICAgIDxsaVxuICAgICAgICAgIG56LW1lbnUtaXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCJcbiAgICAgICAgICBjbGFzcz1cImFudC10YWJzLWRyb3Bkb3duLW1lbnUtaXRlbVwiXG4gICAgICAgICAgW2NsYXNzLmFudC10YWJzLWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICBbbnpTZWxlY3RlZF09XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgICAgW256RGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KGl0ZW0pXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwib25Db250ZXh0bWVudShpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtLnRhYi5sYWJlbDsgY29udGV4dDogeyB2aXNpYmxlOiBmYWxzZSB9XCI+XG4gICAgICAgICAgICB7eyBpdGVtLnRhYi5sYWJlbCB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFkZGFibGVcIiBuei10YWItYWRkLWJ1dHRvbiBbYWRkSWNvbl09XCJhZGRJY29uXCIgKGNsaWNrKT1cImFkZENsaWNrZWQuZW1pdCgpXCI+PC9idXR0b24+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC10YWJzLW5hdi1vcGVyYXRpb25zJyxcbiAgICAnW2NsYXNzLmFudC10YWJzLW5hdi1vcGVyYXRpb25zLWhpZGRlbl0nOiAnaXRlbXMubGVuZ3RoID09PSAwJ1xuICB9LFxuICBpbXBvcnRzOiBbXG4gICAgTnpJY29uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOek91dGxldE1vZHVsZSxcbiAgICBOelRhYkFkZEJ1dHRvbkNvbXBvbmVudCxcbiAgICBOekRyb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgICBOek1lbnVNb2R1bGUsXG4gICAgTnpEcm9wRG93bkRpcmVjdGl2ZVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE56VGFiTmF2T3BlcmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgaXRlbXM6IE56VGFiTmF2SXRlbURpcmVjdGl2ZVtdID0gW107XG4gIEBJbnB1dCgpIGFkZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkSWNvbjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8TnpTYWZlQW55PiA9ICdwbHVzJztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWRkQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOelRhYk5hdkl0ZW1EaXJlY3RpdmU+KCk7XG4gIGNsb3NlQW5pbWF0aW9uV2FpdFRpbWVvdXRJZD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBtZW51T3BlbmVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG9uU2VsZWN0KGl0ZW06IE56VGFiTmF2SXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xuICAgICAgLy8gaWdub3JlIG56Q2FuRGVhY3RpdmF0ZVxuICAgICAgaXRlbS50YWIubnpDbGljay5lbWl0KCk7XG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgb25Db250ZXh0bWVudShpdGVtOiBOelRhYk5hdkl0ZW1EaXJlY3RpdmUsIGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIGl0ZW0udGFiLm56Q29udGV4dG1lbnUuZW1pdChlKTtcbiAgICB9XG4gIH1cbiAgc2hvd0l0ZW1zKCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlQW5pbWF0aW9uV2FpdFRpbWVvdXRJZCk7XG4gICAgdGhpcy5tZW51T3BlbmVkID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG1lbnVWaXNDaGFuZ2UodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgdGhpcy5jbG9zZUFuaW1hdGlvbldhaXRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5tZW51T3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMTUwKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Py5vZmZzZXRXaWR0aCB8fCAwO1xuICB9XG5cbiAgZ2V0RWxlbWVudEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQ/Lm9mZnNldEhlaWdodCB8fCAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VBbmltYXRpb25XYWl0VGltZW91dElkKTtcbiAgfVxufVxuIl19