UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

232 lines 26.7 kB
import { __decorate } from "tslib"; import { NgClass, NgForOf, NgIf } from '@angular/common'; 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 { NzOutletModule } from 'ng-zorro-antd/core/outlet'; import { InputBoolean } from 'ng-zorro-antd/core/util'; import { NzIconModule } from 'ng-zorro-antd/icon'; 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 "ng-zorro-antd/icon"; import * as i4 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(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NzSegmentedComponent, deps: [{ token: i1.NzConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NzSegmentedComponent, isStandalone: true, 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: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzOutletModule }, { kind: "directive", type: i4.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: "17.2.1", 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], imports: [NgIf, NgClass, NgForOf, NzIconModule, NzOutletModule], standalone: true }] }], ctorParameters: () => [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudGVkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvc2VnbWVudGVkL3NlZ21lbnRlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUlOLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBdUIsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFnQyxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQThELE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFFdkcsTUFBTSxxQkFBcUIsR0FBZ0IsV0FBVyxDQUFDO0FBNkR2RCxNQUFNLE9BQU8sb0JBQW9CO0lBc0MvQixZQUNrQixlQUFnQyxFQUMvQixHQUFzQixFQUNWLGNBQThCO1FBRjNDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMvQixRQUFHLEdBQUgsR0FBRyxDQUFt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QUssRUFBRSxPQUFPLENBQUMsV0FBVztLQUMzQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFRodW1iQW5pbWF0aW9uUHJvcHMsIHRodW1iTW90aW9uIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBOekNvbmZpZ0tleSwgTnpDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBOek91dGxldE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9vdXRsZXQnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOelNhZmVBbnksIE56U2l6ZUxEU1R5cGUsIE9uQ2hhbmdlVHlwZSwgT25Ub3VjaGVkVHlwZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25zLCBOek5vcm1hbGl6ZWRPcHRpb25zLCBOelNlZ21lbnRlZE9wdGlvbiwgTnpTZWdtZW50ZWRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IE5aX0NPTkZJR19NT0RVTEVfTkFNRTogTnpDb25maWdLZXkgPSAnc2VnbWVudGVkJztcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzZWxlY3RvcjogJ256LXNlZ21lbnRlZCcsXG4gIGV4cG9ydEFzOiAnbnpTZWdtZW50ZWQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gdGh1bWIgbW90aW9uIGRpdiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYW50LXNlZ21lbnRlZC1ncm91cFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImFuaW1hdGlvblN0YXRlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYW50LXNlZ21lbnRlZC10aHVtYic6IHRydWUsICdhbnQtc2VnbWVudGVkLXRodW1iLW1vdGlvbic6IHRydWUgfVwiXG4gICAgICAgIFtAdGh1bWJNb3Rpb25dPVwiYW5pbWF0aW9uU3RhdGVcIlxuICAgICAgICAoQHRodW1iTW90aW9uLmRvbmUpPVwiaGFuZGxlVGh1bWJBbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGxhYmVsXG4gICAgICAgICNpdGVtTGFiZWxzXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5vcm1hbGl6ZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0nOiB0cnVlLFxuICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0tc2VsZWN0ZWQnOiBpID09PSBzZWxlY3RlZEluZGV4LFxuICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0tZGlzYWJsZWQnOiAhIW56RGlzYWJsZWQgfHwgaXRlbS5kaXNhYmxlZFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwiYW50LXNlZ21lbnRlZC1pdGVtLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleFwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnQtc2VnbWVudGVkLWl0ZW0tbGFiZWxcIiAoY2xpY2spPVwiIWl0ZW0uZGlzYWJsZWQgJiYgaGFuZGxlT3B0aW9uQ2xpY2soaSlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5pY29uOyBlbHNlIGVsc2VfdGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYW50LXNlZ21lbnRlZC1pdGVtLWljb25cIj48c3BhbiBuei1pY29uIFtuelR5cGVdPVwiaXRlbS5pY29uXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtLnVzZVRlbXBsYXRlICYmIG56TGFiZWxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VfdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuelN0cmluZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS51c2VUZW1wbGF0ZSAmJiBuekxhYmVsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICBgLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdhbnQtc2VnbWVudGVkJyxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtZGlzYWJsZWRdJzogJyEhbnpEaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5hbnQtc2VnbWVudGVkLXJ0bF0nOiBgZGlyID09PSAncnRsJ2AsXG4gICAgJ1tjbGFzcy5hbnQtc2VnbWVudGVkLWxnXSc6IGBuelNpemUgPT09ICdsYXJnZSdgLFxuICAgICdbY2xhc3MuYW50LXNlZ21lbnRlZC1zbV0nOiBgbnpTaXplID09PSAnc21hbGwnYCxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtYmxvY2tdJzogYCEhbnpCbG9ja2BcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnpTZWdtZW50ZWRDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XSxcbiAgYW5pbWF0aW9uczogW3RodW1iTW90aW9uXSxcbiAgaW1wb3J0czogW05nSWYsIE5nQ2xhc3MsIE5nRm9yT2YsIE56SWNvbk1vZHVsZSwgTnpPdXRsZXRNb2R1bGVdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE56U2VnbWVudGVkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekRpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekJsb2NrOiBCb29sZWFuSW5wdXQ7XG5cbiAgcmVhZG9ubHkgX256TW9kdWxlTmFtZTogTnpDb25maWdLZXkgPSBOWl9DT05GSUdfTU9EVUxFX05BTUU7XG5cbiAgQFZpZXdDaGlsZHJlbignaXRlbUxhYmVscycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBsaXN0T2ZPcHRpb25zITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBJbnB1dCgpXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBuekJsb2NrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgQElucHV0Qm9vbGVhbigpXG4gIG56RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBuek9wdGlvbnM6IE56U2VnbWVudGVkT3B0aW9ucyA9IFtdO1xuXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpTaXplOiBOelNpemVMRFNUeXBlID0gJ2RlZmF1bHQnO1xuXG4gIEBJbnB1dCgpIG56TGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IE56U2VnbWVudGVkT3B0aW9uOyBpbmRleDogbnVtYmVyIH0+IHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56VmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBwdWJsaWMgZGlyOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XG4gIHB1YmxpYyB0cmFuc2l0aW9uZWRUb0luZGV4ID0gLTE7XG4gIHB1YmxpYyBhbmltYXRpb25TdGF0ZTogbnVsbCB8IHsgdmFsdWU6IHN0cmluZzsgcGFyYW1zOiBUaHVtYkFuaW1hdGlvblByb3BzIH0gPSBudWxsO1xuXG4gIHB1YmxpYyBub3JtYWxpemVkT3B0aW9uczogTnpOb3JtYWxpemVkT3B0aW9ucyA9IFtdO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG9uQ2hhbmdlOiBPbkNoYW5nZVR5cGUgPSAoKSA9PiB7fTtcblxuICBvblRvdWNoZWQ6IE9uVG91Y2hlZFR5cGUgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbnpDb25maWdTZXJ2aWNlOiBOekNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5XG4gICkge1xuICAgIHRoaXMuZGlyZWN0aW9uYWxpdHkuY2hhbmdlPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGRpcmVjdGlvbiA9PiB7XG4gICAgICB0aGlzLmRpciA9IGRpcmVjdGlvbjtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG56T3B0aW9ucyB9ID0gY2hhbmdlcztcbiAgICBpZiAobnpPcHRpb25zKSB7XG4gICAgICB0aGlzLm5vcm1hbGl6ZWRPcHRpb25zID0gbm9ybWFsaXplT3B0aW9ucyhuek9wdGlvbnMuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVPcHRpb25DbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubnpEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRJbmRleChpbmRleCk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKGluZGV4KTtcbiAgICB0aGlzLm56VmFsdWVDaGFuZ2UuZW1pdChpbmRleCk7XG4gIH1cblxuICBoYW5kbGVUaHVtYkFuaW1hdGlvbkRvbmUoZTogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgaWYgKGUuZnJvbVN0YXRlID09PSAnZnJvbScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleDtcbiAgICAgIHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleCA9IC0xO1xuICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID4gLTEpIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRJbmRleCh2YWx1ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBPbkNoYW5nZVR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogT25Ub3VjaGVkVHlwZSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5saXN0T2ZPcHRpb25zIHx8IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gLTEgfHwgdGhpcy5zZWxlY3RlZEluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSB7XG4gICAgICB2YWx1ZTogJ2Zyb20nLFxuICAgICAgcGFyYW1zOiBnZXRUaHVtYkFuaW1hdGlvblByb3BzKHRoaXMubGlzdE9mT3B0aW9ucy5nZXQodGhpcy5zZWxlY3RlZEluZGV4KSEubmF0aXZlRWxlbWVudCEpXG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0ge1xuICAgICAgdmFsdWU6ICd0bycsXG4gICAgICBwYXJhbXM6IGdldFRodW1iQW5pbWF0aW9uUHJvcHModGhpcy5saXN0T2ZPcHRpb25zLmdldChpbmRleCkhLm5hdGl2ZUVsZW1lbnQhKVxuICAgIH07XG4gICAgdGhpcy50cmFuc2l0aW9uZWRUb0luZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRodW1iQW5pbWF0aW9uUHJvcHMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBUaHVtYkFuaW1hdGlvblByb3BzIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2Zvcm06IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB3aWR0aDogZWxlbWVudC5jbGllbnRXaWR0aFxuICB9O1xufVxuIl19