ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
228 lines • 25.5 kB
JavaScript
import { __decorate } from "tslib";
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, Optional, Output, ViewChildren, ViewEncapsulation } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { thumbMotion } from 'ng-zorro-antd/core/animation';
import { WithConfig } from 'ng-zorro-antd/core/config';
import { InputBoolean } from 'ng-zorro-antd/core/util';
import { normalizeOptions } from './types';
import * as i0 from "@angular/core";
import * as i1 from "ng-zorro-antd/core/config";
import * as i2 from "@angular/cdk/bidi";
import * as i3 from "@angular/common";
import * as i4 from "ng-zorro-antd/icon";
import * as i5 from "ng-zorro-antd/core/outlet";
const NZ_CONFIG_MODULE_NAME = 'segmented';
export class NzSegmentedComponent {
constructor(nzConfigService, cdr, directionality) {
this.nzConfigService = nzConfigService;
this.cdr = cdr;
this.directionality = directionality;
this._nzModuleName = NZ_CONFIG_MODULE_NAME;
this.nzBlock = false;
this.nzDisabled = false;
this.nzOptions = [];
this.nzSize = 'default';
this.nzLabelTemplate = null;
this.nzValueChange = new EventEmitter();
this.dir = 'ltr';
this.selectedIndex = 0;
this.transitionedToIndex = -1;
this.animationState = null;
this.normalizedOptions = [];
this.destroy$ = new Subject();
this.onChange = () => { };
this.onTouched = () => { };
this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe(direction => {
this.dir = direction;
this.cdr.detectChanges();
});
}
ngOnChanges(changes) {
const { nzOptions } = changes;
if (nzOptions) {
this.normalizedOptions = normalizeOptions(nzOptions.currentValue);
}
}
handleOptionClick(index) {
if (this.nzDisabled) {
return;
}
this.changeSelectedIndex(index);
this.onChange(index);
this.nzValueChange.emit(index);
}
handleThumbAnimationDone(e) {
if (e.fromState === 'from') {
this.selectedIndex = this.transitionedToIndex;
this.transitionedToIndex = -1;
this.animationState = null;
this.cdr.detectChanges();
}
}
writeValue(value) {
if (typeof value === 'number' && value > -1) {
this.changeSelectedIndex(value);
this.cdr.markForCheck();
}
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
changeSelectedIndex(index) {
if (!this.listOfOptions || this.selectedIndex === -1 || this.selectedIndex === index) {
return;
}
this.animationState = {
value: 'from',
params: getThumbAnimationProps(this.listOfOptions.get(this.selectedIndex).nativeElement)
};
this.selectedIndex = -1;
this.cdr.detectChanges();
this.animationState = {
value: 'to',
params: getThumbAnimationProps(this.listOfOptions.get(index).nativeElement)
};
this.transitionedToIndex = index;
this.cdr.detectChanges();
}
}
NzSegmentedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: NzSegmentedComponent, deps: [{ token: i1.NzConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component });
NzSegmentedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: NzSegmentedComponent, selector: "nz-segmented", inputs: { nzBlock: "nzBlock", nzDisabled: "nzDisabled", nzOptions: "nzOptions", nzSize: "nzSize", nzLabelTemplate: "nzLabelTemplate" }, outputs: { nzValueChange: "nzValueChange" }, host: { properties: { "class.ant-segmented-disabled": "!!nzDisabled", "class.ant-segmented-rtl": "dir === 'rtl'", "class.ant-segmented-lg": "nzSize === 'large'", "class.ant-segmented-sm": "nzSize === 'small'", "class.ant-segmented-block": "!!nzBlock" }, classAttribute: "ant-segmented" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NzSegmentedComponent), multi: true }], viewQueries: [{ propertyName: "listOfOptions", predicate: ["itemLabels"], descendants: true, read: ElementRef }], exportAs: ["nzSegmented"], usesOnChanges: true, ngImport: i0, template: `
<!-- thumb motion div -->
<div class="ant-segmented-group">
<div
*ngIf="animationState"
[ngClass]="{ 'ant-segmented-thumb': true, 'ant-segmented-thumb-motion': true }"
[@thumbMotion]="animationState"
(@thumbMotion.done)="handleThumbAnimationDone($event)"
></div>
<label
#itemLabels
*ngFor="let item of normalizedOptions; let i = index"
[ngClass]="{
'ant-segmented-item': true,
'ant-segmented-item-selected': i === selectedIndex,
'ant-segmented-item-disabled': !!nzDisabled || item.disabled
}"
>
<input class="ant-segmented-item-input" type="radio" [checked]="i === selectedIndex" />
<div class="ant-segmented-item-label" (click)="!item.disabled && handleOptionClick(i)">
<ng-container *ngIf="item.icon; else else_template">
<span class="ant-segmented-item-icon"><span nz-icon [nzType]="item.icon"></span></span>
<span>
<ng-container
*nzStringTemplateOutlet="item.useTemplate && nzLabelTemplate; context: { $implicit: item, index: i }"
>
{{ item.label }}
</ng-container>
</span>
</ng-container>
<ng-template #else_template>
<ng-container
*nzStringTemplateOutlet="item.useTemplate && nzLabelTemplate; context: { $implicit: item, index: i }"
>
{{ item.label }}
</ng-container>
</ng-template>
</div>
</label>
</div>
`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "directive", type: i5.NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }], animations: [thumbMotion], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
__decorate([
InputBoolean()
], NzSegmentedComponent.prototype, "nzBlock", void 0);
__decorate([
InputBoolean()
], NzSegmentedComponent.prototype, "nzDisabled", void 0);
__decorate([
WithConfig()
], NzSegmentedComponent.prototype, "nzSize", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: NzSegmentedComponent, decorators: [{
type: Component,
args: [{
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
selector: 'nz-segmented',
exportAs: 'nzSegmented',
template: `
<!-- thumb motion div -->
<div class="ant-segmented-group">
<div
*ngIf="animationState"
[ngClass]="{ 'ant-segmented-thumb': true, 'ant-segmented-thumb-motion': true }"
[@thumbMotion]="animationState"
(@thumbMotion.done)="handleThumbAnimationDone($event)"
></div>
<label
#itemLabels
*ngFor="let item of normalizedOptions; let i = index"
[ngClass]="{
'ant-segmented-item': true,
'ant-segmented-item-selected': i === selectedIndex,
'ant-segmented-item-disabled': !!nzDisabled || item.disabled
}"
>
<input class="ant-segmented-item-input" type="radio" [checked]="i === selectedIndex" />
<div class="ant-segmented-item-label" (click)="!item.disabled && handleOptionClick(i)">
<ng-container *ngIf="item.icon; else else_template">
<span class="ant-segmented-item-icon"><span nz-icon [nzType]="item.icon"></span></span>
<span>
<ng-container
*nzStringTemplateOutlet="item.useTemplate && nzLabelTemplate; context: { $implicit: item, index: i }"
>
{{ item.label }}
</ng-container>
</span>
</ng-container>
<ng-template #else_template>
<ng-container
*nzStringTemplateOutlet="item.useTemplate && nzLabelTemplate; context: { $implicit: item, index: i }"
>
{{ item.label }}
</ng-container>
</ng-template>
</div>
</label>
</div>
`,
host: {
class: 'ant-segmented',
'[class.ant-segmented-disabled]': '!!nzDisabled',
'[class.ant-segmented-rtl]': `dir === 'rtl'`,
'[class.ant-segmented-lg]': `nzSize === 'large'`,
'[class.ant-segmented-sm]': `nzSize === 'small'`,
'[class.ant-segmented-block]': `!!nzBlock`
},
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NzSegmentedComponent), multi: true }],
animations: [thumbMotion]
}]
}], ctorParameters: function () { return [{ type: i1.NzConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.Directionality, decorators: [{
type: Optional
}] }]; }, propDecorators: { listOfOptions: [{
type: ViewChildren,
args: ['itemLabels', { read: ElementRef }]
}], nzBlock: [{
type: Input
}], nzDisabled: [{
type: Input
}], nzOptions: [{
type: Input
}], nzSize: [{
type: Input
}], nzLabelTemplate: [{
type: Input
}], nzValueChange: [{
type: Output
}] } });
function getThumbAnimationProps(element) {
return {
transform: element.offsetLeft,
width: element.clientWidth
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudGVkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvc2VnbWVudGVkL3NlZ21lbnRlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUlOLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBdUIsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFnQyxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUE4RCxNQUFNLFNBQVMsQ0FBQzs7Ozs7OztBQUV2RyxNQUFNLHFCQUFxQixHQUFnQixXQUFXLENBQUM7QUEyRHZELE1BQU0sT0FBTyxvQkFBb0I7SUFzQy9CLFlBQ2tCLGVBQWdDLEVBQy9CLEdBQXNCLEVBQ1YsY0FBOEI7UUFGM0Msb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ1YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBckNwRCxrQkFBYSxHQUFnQixxQkFBcUIsQ0FBQztRQU01RCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBSXpCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFbkIsY0FBUyxHQUF1QixFQUFFLENBQUM7UUFFckIsV0FB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QTJCLEVBQUUsZUFBZTt3QkFDNUMsMEJBQTBCLEVBQUUsb0JBQW9CO3dCQUNoRCwwQkFBMEIsRUFBRSxvQkFBb0I7d0JBQ2hELDZCQUE2QixFQUFFLFdBQVc7cUJBQzNDO29CQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUM3RyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUM7aUJBQzFCOzswQkEwQ0ksUUFBUTs0Q0FuQ3VDLGFBQWE7c0JBQTlELFlBQVk7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJaEQsT0FBTztzQkFGTixLQUFLO2dCQU1OLFVBQVU7c0JBRlQsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVpQixNQUFNO3NCQUE1QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRWEsYUFBYTtzQkFBL0IsTUFBTTs7QUEwRlQsU0FBUyxzQkFBc0IsQ0FBQyxPQUFvQjtJQUNsRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVztLQUMzQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUaHVtYkFuaW1hdGlvblByb3BzLCB0aHVtYk1vdGlvbiB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9hbmltYXRpb24nO1xuaW1wb3J0IHsgTnpDb25maWdLZXksIE56Q29uZmlnU2VydmljZSwgV2l0aENvbmZpZyB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOelNhZmVBbnksIE56U2l6ZUxEU1R5cGUsIE9uQ2hhbmdlVHlwZSwgT25Ub3VjaGVkVHlwZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbnMsIE56Tm9ybWFsaXplZE9wdGlvbnMsIE56U2VnbWVudGVkT3B0aW9uLCBOelNlZ21lbnRlZE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgTlpfQ09ORklHX01PRFVMRV9OQU1FOiBOekNvbmZpZ0tleSA9ICdzZWdtZW50ZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHNlbGVjdG9yOiAnbnotc2VnbWVudGVkJyxcbiAgZXhwb3J0QXM6ICduelNlZ21lbnRlZCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSB0aHVtYiBtb3Rpb24gZGl2IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhbnQtc2VnbWVudGVkLWdyb3VwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiYW5pbWF0aW9uU3RhdGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhbnQtc2VnbWVudGVkLXRodW1iJzogdHJ1ZSwgJ2FudC1zZWdtZW50ZWQtdGh1bWItbW90aW9uJzogdHJ1ZSB9XCJcbiAgICAgICAgW0B0aHVtYk1vdGlvbl09XCJhbmltYXRpb25TdGF0ZVwiXG4gICAgICAgIChAdGh1bWJNb3Rpb24uZG9uZSk9XCJoYW5kbGVUaHVtYkFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8bGFiZWxcbiAgICAgICAgI2l0ZW1MYWJlbHNcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygbm9ybWFsaXplZE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2FudC1zZWdtZW50ZWQtaXRlbSc6IHRydWUsXG4gICAgICAgICAgJ2FudC1zZWdtZW50ZWQtaXRlbS1zZWxlY3RlZCc6IGkgPT09IHNlbGVjdGVkSW5kZXgsXG4gICAgICAgICAgJ2FudC1zZWdtZW50ZWQtaXRlbS1kaXNhYmxlZCc6ICEhbnpEaXNhYmxlZCB8fCBpdGVtLmRpc2FibGVkXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJhbnQtc2VnbWVudGVkLWl0ZW0taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBbY2hlY2tlZF09XCJpID09PSBzZWxlY3RlZEluZGV4XCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFudC1zZWdtZW50ZWQtaXRlbS1sYWJlbFwiIChjbGljayk9XCIhaXRlbS5kaXNhYmxlZCAmJiBoYW5kbGVPcHRpb25DbGljayhpKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmljb247IGVsc2UgZWxzZV90ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbnQtc2VnbWVudGVkLWl0ZW0taWNvblwiPjxzcGFuIG56LWljb24gW256VHlwZV09XCJpdGVtLmljb25cIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbnpTdHJpbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0udXNlVGVtcGxhdGUgJiYgbnpMYWJlbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZV90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtLnVzZVRlbXBsYXRlICYmIG56TGFiZWxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC1zZWdtZW50ZWQnLFxuICAgICdbY2xhc3MuYW50LXNlZ21lbnRlZC1kaXNhYmxlZF0nOiAnISFuekRpc2FibGVkJyxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtcnRsXSc6IGBkaXIgPT09ICdydGwnYCxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtbGddJzogYG56U2l6ZSA9PT0gJ2xhcmdlJ2AsXG4gICAgJ1tjbGFzcy5hbnQtc2VnbWVudGVkLXNtXSc6IGBuelNpemUgPT09ICdzbWFsbCdgLFxuICAgICdbY2xhc3MuYW50LXNlZ21lbnRlZC1ibG9ja10nOiBgISFuekJsb2NrYFxuICB9LFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOelNlZ21lbnRlZENvbXBvbmVudCksIG11bHRpOiB0cnVlIH1dLFxuICBhbmltYXRpb25zOiBbdGh1bWJNb3Rpb25dXG59KVxuZXhwb3J0IGNsYXNzIE56U2VnbWVudGVkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekRpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekJsb2NrOiBCb29sZWFuSW5wdXQ7XG5cbiAgcmVhZG9ubHkgX256TW9kdWxlTmFtZTogTnpDb25maWdLZXkgPSBOWl9DT05GSUdfTU9EVUxFX05BTUU7XG5cbiAgQFZpZXdDaGlsZHJlbignaXRlbUxhYmVscycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBsaXN0T2ZPcHRpb25zITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBJbnB1dCgpXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBuekJsb2NrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgQElucHV0Qm9vbGVhbigpXG4gIG56RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBuek9wdGlvbnM6IE56U2VnbWVudGVkT3B0aW9ucyA9IFtdO1xuXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpTaXplOiBOelNpemVMRFNUeXBlID0gJ2RlZmF1bHQnO1xuXG4gIEBJbnB1dCgpIG56TGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IE56U2VnbWVudGVkT3B0aW9uOyBpbmRleDogbnVtYmVyIH0+IHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56VmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBwdWJsaWMgZGlyOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XG4gIHB1YmxpYyB0cmFuc2l0aW9uZWRUb0luZGV4ID0gLTE7XG4gIHB1YmxpYyBhbmltYXRpb25TdGF0ZTogbnVsbCB8IHsgdmFsdWU6IHN0cmluZzsgcGFyYW1zOiBUaHVtYkFuaW1hdGlvblByb3BzIH0gPSBudWxsO1xuXG4gIHB1YmxpYyBub3JtYWxpemVkT3B0aW9uczogTnpOb3JtYWxpemVkT3B0aW9ucyA9IFtdO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG9uQ2hhbmdlOiBPbkNoYW5nZVR5cGUgPSAoKSA9PiB7fTtcblxuICBvblRvdWNoZWQ6IE9uVG91Y2hlZFR5cGUgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbnpDb25maWdTZXJ2aWNlOiBOekNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5XG4gICkge1xuICAgIHRoaXMuZGlyZWN0aW9uYWxpdHkuY2hhbmdlPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGRpcmVjdGlvbiA9PiB7XG4gICAgICB0aGlzLmRpciA9IGRpcmVjdGlvbjtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG56T3B0aW9ucyB9ID0gY2hhbmdlcztcbiAgICBpZiAobnpPcHRpb25zKSB7XG4gICAgICB0aGlzLm5vcm1hbGl6ZWRPcHRpb25zID0gbm9ybWFsaXplT3B0aW9ucyhuek9wdGlvbnMuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVPcHRpb25DbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubnpEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRJbmRleChpbmRleCk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKGluZGV4KTtcbiAgICB0aGlzLm56VmFsdWVDaGFuZ2UuZW1pdChpbmRleCk7XG4gIH1cblxuICBoYW5kbGVUaHVtYkFuaW1hdGlvbkRvbmUoZTogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgaWYgKGUuZnJvbVN0YXRlID09PSAnZnJvbScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleDtcbiAgICAgIHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleCA9IC0xO1xuICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID4gLTEpIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRJbmRleCh2YWx1ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBPbkNoYW5nZVR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogT25Ub3VjaGVkVHlwZSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5saXN0T2ZPcHRpb25zIHx8IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gLTEgfHwgdGhpcy5zZWxlY3RlZEluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSB7XG4gICAgICB2YWx1ZTogJ2Zyb20nLFxuICAgICAgcGFyYW1zOiBnZXRUaHVtYkFuaW1hdGlvblByb3BzKHRoaXMubGlzdE9mT3B0aW9ucy5nZXQodGhpcy5zZWxlY3RlZEluZGV4KSEubmF0aXZlRWxlbWVudCEpXG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0ge1xuICAgICAgdmFsdWU6ICd0bycsXG4gICAgICBwYXJhbXM6IGdldFRodW1iQW5pbWF0aW9uUHJvcHModGhpcy5saXN0T2ZPcHRpb25zLmdldChpbmRleCkhLm5hdGl2ZUVsZW1lbnQhKVxuICAgIH07XG4gICAgdGhpcy50cmFuc2l0aW9uZWRUb0luZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRodW1iQW5pbWF0aW9uUHJvcHMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBUaHVtYkFuaW1hdGlvblByb3BzIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2Zvcm06IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB3aWR0aDogZWxlbWVudC5jbGllbnRXaWR0aFxuICB9O1xufVxuIl19