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: "14.2.12", 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: "14.2.12", 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: "14.2.12", 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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QWU7d0JBQzVDLDBCQUEwQixFQUFFLG9CQUFvQjt3QkFDaEQsMEJBQTBCLEVBQUUsb0JBQW9CO3dCQUNoRCw2QkFBNkIsRUFBRSxXQUFXO3FCQUMzQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDN0csVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUMxQjs7MEJBMENJLFFBQVE7NENBbkN1QyxhQUFhO3NCQUE5RCxZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSWhELE9BQU87c0JBRk4sS0FBSztnQkFNTixVQUFVO3NCQUZULEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFFaUIsTUFBTTtzQkFBNUIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVhLGFBQWE7c0JBQS9CLE1BQU07O0FBMEZULFNBQVMsc0JBQXNCLENBQUMsT0FBb0I7SUFDbEQsT0FBTztRQUNMLFNBQVMsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVc7S0FDM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3Rpb24sIERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVGh1bWJBbmltYXRpb25Qcm9wcywgdGh1bWJNb3Rpb24gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvYW5pbWF0aW9uJztcbmltcG9ydCB7IE56Q29uZmlnS2V5LCBOekNvbmZpZ1NlcnZpY2UsIFdpdGhDb25maWcgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgTnpTYWZlQW55LCBOelNpemVMRFNUeXBlLCBPbkNoYW5nZVR5cGUsIE9uVG91Y2hlZFR5cGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25zLCBOek5vcm1hbGl6ZWRPcHRpb25zLCBOelNlZ21lbnRlZE9wdGlvbiwgTnpTZWdtZW50ZWRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IE5aX0NPTkZJR19NT0RVTEVfTkFNRTogTnpDb25maWdLZXkgPSAnc2VnbWVudGVkJztcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzZWxlY3RvcjogJ256LXNlZ21lbnRlZCcsXG4gIGV4cG9ydEFzOiAnbnpTZWdtZW50ZWQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gdGh1bWIgbW90aW9uIGRpdiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYW50LXNlZ21lbnRlZC1ncm91cFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImFuaW1hdGlvblN0YXRlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYW50LXNlZ21lbnRlZC10aHVtYic6IHRydWUsICdhbnQtc2VnbWVudGVkLXRodW1iLW1vdGlvbic6IHRydWUgfVwiXG4gICAgICAgIFtAdGh1bWJNb3Rpb25dPVwiYW5pbWF0aW9uU3RhdGVcIlxuICAgICAgICAoQHRodW1iTW90aW9uLmRvbmUpPVwiaGFuZGxlVGh1bWJBbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGxhYmVsXG4gICAgICAgICNpdGVtTGFiZWxzXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5vcm1hbGl6ZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0nOiB0cnVlLFxuICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0tc2VsZWN0ZWQnOiBpID09PSBzZWxlY3RlZEluZGV4LFxuICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0tZGlzYWJsZWQnOiAhIW56RGlzYWJsZWQgfHwgaXRlbS5kaXNhYmxlZFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwiYW50LXNlZ21lbnRlZC1pdGVtLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleFwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnQtc2VnbWVudGVkLWl0ZW0tbGFiZWxcIiAoY2xpY2spPVwiIWl0ZW0uZGlzYWJsZWQgJiYgaGFuZGxlT3B0aW9uQ2xpY2soaSlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5pY29uOyBlbHNlIGVsc2VfdGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYW50LXNlZ21lbnRlZC1pdGVtLWljb25cIj48c3BhbiBuei1pY29uIFtuelR5cGVdPVwiaXRlbS5pY29uXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtLnVzZVRlbXBsYXRlICYmIG56TGFiZWxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VfdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuelN0cmluZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS51c2VUZW1wbGF0ZSAmJiBuekxhYmVsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICBgLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdhbnQtc2VnbWVudGVkJyxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtZGlzYWJsZWRdJzogJyEhbnpEaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5hbnQtc2VnbWVudGVkLXJ0bF0nOiBgZGlyID09PSAncnRsJ2AsXG4gICAgJ1tjbGFzcy5hbnQtc2VnbWVudGVkLWxnXSc6IGBuelNpemUgPT09ICdsYXJnZSdgLFxuICAgICdbY2xhc3MuYW50LXNlZ21lbnRlZC1zbV0nOiBgbnpTaXplID09PSAnc21hbGwnYCxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtYmxvY2tdJzogYCEhbnpCbG9ja2BcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnpTZWdtZW50ZWRDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XSxcbiAgYW5pbWF0aW9uczogW3RodW1iTW90aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBOelNlZ21lbnRlZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpEaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpCbG9jazogQm9vbGVhbklucHV0O1xuXG4gIHJlYWRvbmx5IF9uek1vZHVsZU5hbWU6IE56Q29uZmlnS2V5ID0gTlpfQ09ORklHX01PRFVMRV9OQU1FO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2l0ZW1MYWJlbHMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbGlzdE9mT3B0aW9ucyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBASW5wdXQoKVxuICBASW5wdXRCb29sZWFuKClcbiAgbnpCbG9jazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBuekRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbnpPcHRpb25zOiBOelNlZ21lbnRlZE9wdGlvbnMgPSBbXTtcblxuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56U2l6ZTogTnpTaXplTERTVHlwZSA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSBuekxhYmVsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBOelNlZ21lbnRlZE9wdGlvbjsgaW5kZXg6IG51bWJlciB9PiB8IG51bGwgPSBudWxsO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBuelZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgcHVibGljIGRpcjogRGlyZWN0aW9uID0gJ2x0cic7XG5cbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xuICBwdWJsaWMgdHJhbnNpdGlvbmVkVG9JbmRleCA9IC0xO1xuICBwdWJsaWMgYW5pbWF0aW9uU3RhdGU6IG51bGwgfCB7IHZhbHVlOiBzdHJpbmc7IHBhcmFtczogVGh1bWJBbmltYXRpb25Qcm9wcyB9ID0gbnVsbDtcblxuICBwdWJsaWMgbm9ybWFsaXplZE9wdGlvbnM6IE56Tm9ybWFsaXplZE9wdGlvbnMgPSBbXTtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBvbkNoYW5nZTogT25DaGFuZ2VUeXBlID0gKCkgPT4ge307XG5cbiAgb25Ub3VjaGVkOiBPblRvdWNoZWRUeXBlID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IG56Q29uZmlnU2VydmljZTogTnpDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdGlvbmFsaXR5OiBEaXJlY3Rpb25hbGl0eVxuICApIHtcbiAgICB0aGlzLmRpcmVjdGlvbmFsaXR5LmNoYW5nZT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShkaXJlY3Rpb24gPT4ge1xuICAgICAgdGhpcy5kaXIgPSBkaXJlY3Rpb247XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBuek9wdGlvbnMgfSA9IGNoYW5nZXM7XG4gICAgaWYgKG56T3B0aW9ucykge1xuICAgICAgdGhpcy5ub3JtYWxpemVkT3B0aW9ucyA9IG5vcm1hbGl6ZU9wdGlvbnMobnpPcHRpb25zLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT3B0aW9uQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm56RGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZVNlbGVjdGVkSW5kZXgoaW5kZXgpO1xuXG4gICAgdGhpcy5vbkNoYW5nZShpbmRleCk7XG4gICAgdGhpcy5uelZhbHVlQ2hhbmdlLmVtaXQoaW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlVGh1bWJBbmltYXRpb25Eb25lKGU6IE56U2FmZUFueSk6IHZvaWQge1xuICAgIGlmIChlLmZyb21TdGF0ZSA9PT0gJ2Zyb20nKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnRyYW5zaXRpb25lZFRvSW5kZXg7XG4gICAgICB0aGlzLnRyYW5zaXRpb25lZFRvSW5kZXggPSAtMTtcbiAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGVkSW5kZXgodmFsdWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogT25DaGFuZ2VUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IE9uVG91Y2hlZFR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VTZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGlzdE9mT3B0aW9ucyB8fCB0aGlzLnNlbGVjdGVkSW5kZXggPT09IC0xIHx8IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0ge1xuICAgICAgdmFsdWU6ICdmcm9tJyxcbiAgICAgIHBhcmFtczogZ2V0VGh1bWJBbmltYXRpb25Qcm9wcyh0aGlzLmxpc3RPZk9wdGlvbnMuZ2V0KHRoaXMuc2VsZWN0ZWRJbmRleCkhLm5hdGl2ZUVsZW1lbnQhKVxuICAgIH07XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiAndG8nLFxuICAgICAgcGFyYW1zOiBnZXRUaHVtYkFuaW1hdGlvblByb3BzKHRoaXMubGlzdE9mT3B0aW9ucy5nZXQoaW5kZXgpIS5uYXRpdmVFbGVtZW50ISlcbiAgICB9O1xuICAgIHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleCA9IGluZGV4O1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaHVtYkFuaW1hdGlvblByb3BzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogVGh1bWJBbmltYXRpb25Qcm9wcyB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNmb3JtOiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgd2lkdGg6IGVsZW1lbnQuY2xpZW50V2lkdGhcbiAgfTtcbn1cbiJdfQ==