ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
174 lines • 18.3 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, booleanAttribute } 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: "18.0.1", ngImport: i0, type: NzTabNavOperationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.1", type: NzTabNavOperationComponent, isStandalone: true, selector: "nz-tab-nav-operation", inputs: { items: "items", addable: ["addable", "addable", booleanAttribute], 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: "18.0.1", 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,
args: [{ transform: booleanAttribute }]
}], addIcon: [{
type: Input
}], addClicked: [{
type: Output
}], selected: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdi1vcGVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy90YWJzL3RhYi1uYXYtb3BlcmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBOERyRSxNQUFNLE9BQU8sMEJBQTBCO0lBV3JDLFlBQ1MsR0FBc0IsRUFDckIsVUFBbUM7UUFEcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFacEMsVUFBSyxHQUE0QixFQUFFLENBQUM7UUFDTCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3hELFlBQU8sR0FBb0MsTUFBTSxDQUFDO1FBRXhDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUV4RSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBT2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUEyQixFQUFFLENBQWE7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxTQUFTO1FBQ1AsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQjtRQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsMkJBQTJCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7OEdBeERVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGtIQUVqQixnQkFBZ0Isa1JBdkQxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NULDJEQU1DLFlBQVksa05BQ1osSUFBSSw2RkFDSixPQUFPLGtIQUNQLGNBQWMsaVBBQ2QsdUJBQXVCLDhHQUN2Qix1QkFBdUIsMEZBQ3ZCLFlBQVksOGJBQ1osbUJBQW1COzsyRkFJViwwQkFBMEI7a0JBM0R0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ1Q7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSx5QkFBeUI7d0JBQ2hDLHdDQUF3QyxFQUFFLG9CQUFvQjtxQkFDL0Q7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osSUFBSTt3QkFDSixPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7K0dBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNrQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixPQUFPO3NCQUFmLEtBQUs7Z0JBRWEsVUFBVTtzQkFBNUIsTUFBTTtnQkFDWSxRQUFRO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTnpPdXRsZXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvb3V0bGV0JztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBOekRyb3BEb3duRGlyZWN0aXZlLCBOekRyb3Bkb3duTWVudUNvbXBvbmVudCB9IGZyb20gJ25nLXpvcnJvLWFudGQvZHJvcGRvd24nO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE56TWVudU1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbWVudSc7XG5cbmltcG9ydCB7IE56VGFiQWRkQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWItYWRkLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnpUYWJOYXZJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi90YWItbmF2LWl0ZW0uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnotdGFiLW5hdi1vcGVyYXRpb24nLFxuICBleHBvcnRBczogJ256VGFiTmF2T3BlcmF0aW9uJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIG56LWRyb3Bkb3duXG4gICAgICBjbGFzcz1cImFudC10YWJzLW5hdi1tb3JlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgbnpPdmVybGF5Q2xhc3NOYW1lPVwibnotdGFicy1kcm9wZG93blwiXG4gICAgICAjZHJvcGRvd25UcmlnZ2VyPVwibnpEcm9wZG93blwiXG4gICAgICBbbnpEcm9wZG93bk1lbnVdPVwibWVudVwiXG4gICAgICBbbnpPdmVybGF5U3R5bGVdPVwieyBtaW5XaWR0aDogJzQ2cHgnIH1cIlxuICAgICAgW256TWF0Y2hXaWR0aEVsZW1lbnRdPVwibnVsbFwiXG4gICAgICAobnpWaXNpYmxlQ2hhbmdlKT1cIm1lbnVWaXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAobW91c2VlbnRlcik9XCJzaG93SXRlbXMoKVwiXG4gICAgPlxuICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJlbGxpcHNpc1wiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bnotZHJvcGRvd24tbWVudSAjbWVudT1cIm56RHJvcGRvd25NZW51XCI+XG4gICAgICA8dWwgbnotbWVudSAqbmdJZj1cIm1lbnVPcGVuZWRcIj5cbiAgICAgICAgPGxpXG4gICAgICAgICAgbnotbWVudS1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIlxuICAgICAgICAgIGNsYXNzPVwiYW50LXRhYnMtZHJvcGRvd24tbWVudS1pdGVtXCJcbiAgICAgICAgICBbY2xhc3MuYW50LXRhYnMtZHJvcGRvd24tbWVudS1pdGVtLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgIFtuelNlbGVjdGVkXT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgICBbbnpEaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3QoaXRlbSlcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRtZW51KGl0ZW0sICRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbnpTdHJpbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0udGFiLmxhYmVsOyBjb250ZXh0OiB7IHZpc2libGU6IGZhbHNlIH1cIj5cbiAgICAgICAgICAgIHt7IGl0ZW0udGFiLmxhYmVsIH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvbnotZHJvcGRvd24tbWVudT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWRkYWJsZVwiIG56LXRhYi1hZGQtYnV0dG9uIFthZGRJY29uXT1cImFkZEljb25cIiAoY2xpY2spPVwiYWRkQ2xpY2tlZC5lbWl0KClcIj48L2J1dHRvbj5cbiAgYCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYW50LXRhYnMtbmF2LW9wZXJhdGlvbnMnLFxuICAgICdbY2xhc3MuYW50LXRhYnMtbmF2LW9wZXJhdGlvbnMtaGlkZGVuXSc6ICdpdGVtcy5sZW5ndGggPT09IDAnXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBOekljb25Nb2R1bGUsXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICAgIE56T3V0bGV0TW9kdWxlLFxuICAgIE56VGFiQWRkQnV0dG9uQ29tcG9uZW50LFxuICAgIE56RHJvcGRvd25NZW51Q29tcG9uZW50LFxuICAgIE56TWVudU1vZHVsZSxcbiAgICBOekRyb3BEb3duRGlyZWN0aXZlXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTnpUYWJOYXZPcGVyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBpdGVtczogTnpUYWJOYXZJdGVtRGlyZWN0aXZlW10gPSBbXTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFkZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkSWNvbjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8TnpTYWZlQW55PiA9ICdwbHVzJztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWRkQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOelRhYk5hdkl0ZW1EaXJlY3RpdmU+KCk7XG4gIGNsb3NlQW5pbWF0aW9uV2FpdFRpbWVvdXRJZD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBtZW51T3BlbmVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG9uU2VsZWN0KGl0ZW06IE56VGFiTmF2SXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xuICAgICAgLy8gaWdub3JlIG56Q2FuRGVhY3RpdmF0ZVxuICAgICAgaXRlbS50YWIubnpDbGljay5lbWl0KCk7XG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgb25Db250ZXh0bWVudShpdGVtOiBOelRhYk5hdkl0ZW1EaXJlY3RpdmUsIGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIGl0ZW0udGFiLm56Q29udGV4dG1lbnUuZW1pdChlKTtcbiAgICB9XG4gIH1cbiAgc2hvd0l0ZW1zKCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlQW5pbWF0aW9uV2FpdFRpbWVvdXRJZCk7XG4gICAgdGhpcy5tZW51T3BlbmVkID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG1lbnVWaXNDaGFuZ2UodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgdGhpcy5jbG9zZUFuaW1hdGlvbldhaXRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5tZW51T3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMTUwKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Py5vZmZzZXRXaWR0aCB8fCAwO1xuICB9XG5cbiAgZ2V0RWxlbWVudEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQ/Lm9mZnNldEhlaWdodCB8fCAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VBbmltYXRpb25XYWl0VGltZW91dElkKTtcbiAgfVxufVxuIl19