UNPKG

ng-zorro-antd

Version:

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

229 lines (227 loc) 25.9 kB
import { __decorate } from "tslib"; import { NgClass } from '@angular/common'; import { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, 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 { 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: "18.1.2", ngImport: i0, type: NzSegmentedComponent, deps: [{ token: i1.NzConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.Directionality }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: NzSegmentedComponent, isStandalone: true, selector: "nz-segmented", inputs: { nzBlock: ["nzBlock", "nzBlock", booleanAttribute], nzDisabled: ["nzDisabled", "nzDisabled", booleanAttribute], 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"> @if (animationState) { <div [ngClass]="{ 'ant-segmented-thumb': true, 'ant-segmented-thumb-motion': true }" [@thumbMotion]="animationState" (@thumbMotion.done)="handleThumbAnimationDone($event)" ></div> } @for (item of normalizedOptions; track item; let i = $index) { <label #itemLabels [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)"> @if (item.icon) { <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> } @else { <ng-container *nzStringTemplateOutlet="item.useTemplate && nzLabelTemplate; context: { $implicit: item, index: i }" > {{ item.label }} </ng-container> } </div> </label> } </div> `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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([ WithConfig() ], NzSegmentedComponent.prototype, "nzSize", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", 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"> @if (animationState) { <div [ngClass]="{ 'ant-segmented-thumb': true, 'ant-segmented-thumb-motion': true }" [@thumbMotion]="animationState" (@thumbMotion.done)="handleThumbAnimationDone($event)" ></div> } @for (item of normalizedOptions; track item; let i = $index) { <label #itemLabels [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)"> @if (item.icon) { <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> } @else { <ng-container *nzStringTemplateOutlet="item.useTemplate && nzLabelTemplate; context: { $implicit: item, index: i }" > {{ item.label }} </ng-container> } </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: [NgClass, NzIconModule, NzOutletModule], standalone: true }] }], ctorParameters: () => [{ type: i1.NzConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.Directionality }], propDecorators: { listOfOptions: [{ type: ViewChildren, args: ['itemLabels', { read: ElementRef }] }], nzBlock: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzDisabled: [{ type: Input, args: [{ transform: booleanAttribute }] }], 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudGVkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvc2VnbWVudGVkL3NlZ21lbnRlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFJTixZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQXVCLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFBZ0MsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQThELE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFFdkcsTUFBTSxxQkFBcUIsR0FBZ0IsV0FBVyxDQUFDO0FBK0R2RCxNQUFNLE9BQU8sb0JBQW9CO0lBaUMvQixZQUNrQixlQUFnQyxFQUMvQixHQUFzQixFQUN0QixjQUE4QjtRQUYvQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbkN4QyxrQkFBYSxHQUFnQixxQkFBcUIsQ0FB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KiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUaHVtYkFuaW1hdGlvblByb3BzLCB0aHVtYk1vdGlvbiB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9hbmltYXRpb24nO1xuaW1wb3J0IHsgTnpDb25maWdLZXksIE56Q29uZmlnU2VydmljZSwgV2l0aENvbmZpZyB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTnpPdXRsZXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvb3V0bGV0JztcbmltcG9ydCB7IE56U2FmZUFueSwgTnpTaXplTERTVHlwZSwgT25DaGFuZ2VUeXBlLCBPblRvdWNoZWRUeXBlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbnMsIE56Tm9ybWFsaXplZE9wdGlvbnMsIE56U2VnbWVudGVkT3B0aW9uLCBOelNlZ21lbnRlZE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgTlpfQ09ORklHX01PRFVMRV9OQU1FOiBOekNvbmZpZ0tleSA9ICdzZWdtZW50ZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHNlbGVjdG9yOiAnbnotc2VnbWVudGVkJyxcbiAgZXhwb3J0QXM6ICduelNlZ21lbnRlZCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSB0aHVtYiBtb3Rpb24gZGl2IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhbnQtc2VnbWVudGVkLWdyb3VwXCI+XG4gICAgICBAaWYgKGFuaW1hdGlvblN0YXRlKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhbnQtc2VnbWVudGVkLXRodW1iJzogdHJ1ZSwgJ2FudC1zZWdtZW50ZWQtdGh1bWItbW90aW9uJzogdHJ1ZSB9XCJcbiAgICAgICAgICBbQHRodW1iTW90aW9uXT1cImFuaW1hdGlvblN0YXRlXCJcbiAgICAgICAgICAoQHRodW1iTW90aW9uLmRvbmUpPVwiaGFuZGxlVGh1bWJBbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBmb3IgKGl0ZW0gb2Ygbm9ybWFsaXplZE9wdGlvbnM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICNpdGVtTGFiZWxzXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2FudC1zZWdtZW50ZWQtaXRlbSc6IHRydWUsXG4gICAgICAgICAgICAnYW50LXNlZ21lbnRlZC1pdGVtLXNlbGVjdGVkJzogaSA9PT0gc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgICdhbnQtc2VnbWVudGVkLWl0ZW0tZGlzYWJsZWQnOiAhIW56RGlzYWJsZWQgfHwgaXRlbS5kaXNhYmxlZFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiYW50LXNlZ21lbnRlZC1pdGVtLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFudC1zZWdtZW50ZWQtaXRlbS1sYWJlbFwiIChjbGljayk9XCIhaXRlbS5kaXNhYmxlZCAmJiBoYW5kbGVPcHRpb25DbGljayhpKVwiPlxuICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbnQtc2VnbWVudGVkLWl0ZW0taWNvblwiPjxzcGFuIG56LWljb24gW256VHlwZV09XCJpdGVtLmljb25cIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbnpTdHJpbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0udXNlVGVtcGxhdGUgJiYgbnpMYWJlbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuelN0cmluZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS51c2VUZW1wbGF0ZSAmJiBuekxhYmVsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC1zZWdtZW50ZWQnLFxuICAgICdbY2xhc3MuYW50LXNlZ21lbnRlZC1kaXNhYmxlZF0nOiAnISFuekRpc2FibGVkJyxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtcnRsXSc6IGBkaXIgPT09ICdydGwnYCxcbiAgICAnW2NsYXNzLmFudC1zZWdtZW50ZWQtbGddJzogYG56U2l6ZSA9PT0gJ2xhcmdlJ2AsXG4gICAgJ1tjbGFzcy5hbnQtc2VnbWVudGVkLXNtXSc6IGBuelNpemUgPT09ICdzbWFsbCdgLFxuICAgICdbY2xhc3MuYW50LXNlZ21lbnRlZC1ibG9ja10nOiBgISFuekJsb2NrYFxuICB9LFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOelNlZ21lbnRlZENvbXBvbmVudCksIG11bHRpOiB0cnVlIH1dLFxuICBhbmltYXRpb25zOiBbdGh1bWJNb3Rpb25dLFxuICBpbXBvcnRzOiBbTmdDbGFzcywgTnpJY29uTW9kdWxlLCBOek91dGxldE1vZHVsZV0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTnpTZWdtZW50ZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcmVhZG9ubHkgX256TW9kdWxlTmFtZTogTnpDb25maWdLZXkgPSBOWl9DT05GSUdfTU9EVUxFX05BTUU7XG5cbiAgQFZpZXdDaGlsZHJlbignaXRlbUxhYmVscycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBsaXN0T2ZPcHRpb25zITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBuekJsb2NrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIG56RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBuek9wdGlvbnM6IE56U2VnbWVudGVkT3B0aW9ucyA9IFtdO1xuXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpTaXplOiBOelNpemVMRFNUeXBlID0gJ2RlZmF1bHQnO1xuXG4gIEBJbnB1dCgpIG56TGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IE56U2VnbWVudGVkT3B0aW9uOyBpbmRleDogbnVtYmVyIH0+IHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56VmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBwdWJsaWMgZGlyOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XG4gIHB1YmxpYyB0cmFuc2l0aW9uZWRUb0luZGV4ID0gLTE7XG4gIHB1YmxpYyBhbmltYXRpb25TdGF0ZTogbnVsbCB8IHsgdmFsdWU6IHN0cmluZzsgcGFyYW1zOiBUaHVtYkFuaW1hdGlvblByb3BzIH0gPSBudWxsO1xuXG4gIHB1YmxpYyBub3JtYWxpemVkT3B0aW9uczogTnpOb3JtYWxpemVkT3B0aW9ucyA9IFtdO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG9uQ2hhbmdlOiBPbkNoYW5nZVR5cGUgPSAoKSA9PiB7fTtcblxuICBvblRvdWNoZWQ6IE9uVG91Y2hlZFR5cGUgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbnpDb25maWdTZXJ2aWNlOiBOekNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5XG4gICkge1xuICAgIHRoaXMuZGlyZWN0aW9uYWxpdHkuY2hhbmdlPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGRpcmVjdGlvbiA9PiB7XG4gICAgICB0aGlzLmRpciA9IGRpcmVjdGlvbjtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG56T3B0aW9ucyB9ID0gY2hhbmdlcztcbiAgICBpZiAobnpPcHRpb25zKSB7XG4gICAgICB0aGlzLm5vcm1hbGl6ZWRPcHRpb25zID0gbm9ybWFsaXplT3B0aW9ucyhuek9wdGlvbnMuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVPcHRpb25DbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubnpEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRJbmRleChpbmRleCk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKGluZGV4KTtcbiAgICB0aGlzLm56VmFsdWVDaGFuZ2UuZW1pdChpbmRleCk7XG4gIH1cblxuICBoYW5kbGVUaHVtYkFuaW1hdGlvbkRvbmUoZTogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgaWYgKGUuZnJvbVN0YXRlID09PSAnZnJvbScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleDtcbiAgICAgIHRoaXMudHJhbnNpdGlvbmVkVG9JbmRleCA9IC0xO1xuICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID4gLTEpIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRJbmRleCh2YWx1ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBPbkNoYW5nZVR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogT25Ub3VjaGVkVHlwZSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5saXN0T2ZPcHRpb25zIHx8IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gLTEgfHwgdGhpcy5zZWxlY3RlZEluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSB7XG4gICAgICB2YWx1ZTogJ2Zyb20nLFxuICAgICAgcGFyYW1zOiBnZXRUaHVtYkFuaW1hdGlvblByb3BzKHRoaXMubGlzdE9mT3B0aW9ucy5nZXQodGhpcy5zZWxlY3RlZEluZGV4KSEubmF0aXZlRWxlbWVudCEpXG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0ge1xuICAgICAgdmFsdWU6ICd0bycsXG4gICAgICBwYXJhbXM6IGdldFRodW1iQW5pbWF0aW9uUHJvcHModGhpcy5saXN0T2ZPcHRpb25zLmdldChpbmRleCkhLm5hdGl2ZUVsZW1lbnQhKVxuICAgIH07XG4gICAgdGhpcy50cmFuc2l0aW9uZWRUb0luZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRodW1iQW5pbWF0aW9uUHJvcHMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBUaHVtYkFuaW1hdGlvblByb3BzIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2Zvcm06IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB3aWR0aDogZWxlbWVudC5jbGllbnRXaWR0aFxuICB9O1xufVxuIl19