UNPKG

ng-zorro-antd

Version:

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

182 lines 19.2 kB
/** * 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 { NgTemplateOutlet } from '@angular/common'; import { Component, EventEmitter, Input, Output, booleanAttribute } from '@angular/core'; import { PickerComponent } from './components/picker.component'; import { SliderComponent } from './components/slider.component'; import { NgAntdColorBlockComponent } from './ng-antd-color-block.component'; import { defaultColor, generateColor } from './util/util'; import * as i0 from "@angular/core"; export class NgAntdColorPickerComponent { constructor(cdr) { this.cdr = cdr; this.nzOnChange = new EventEmitter(); this.nzOnChangeComplete = new EventEmitter(); this.panelRenderHeader = null; this.panelRenderFooter = null; this.disabledAlpha = false; this.disabled = false; this.colorValue = null; this.alphaColor = ''; this.hueColor = [ 'rgb(255, 0, 0) 0%', 'rgb(255, 255, 0) 17%', 'rgb(0, 255, 0) 33%', 'rgb(0, 255, 255) 50%', 'rgb(0, 0, 255) 67%', 'rgb(255, 0, 255) 83%', 'rgb(255, 0, 0) 100%' ]; this.gradientColors = ['rgba(255, 0, 4, 0) 0%', this.alphaColor]; this.toRgbString = this.colorValue?.toRgbString() || ''; } ngOnInit() { this.setColorValue(this.value); } ngOnChanges(changes) { const { value, defaultValue } = changes; if (value || defaultValue) { this.setColorValue(this.value); } } hasValue(value) { return !!value; } setColorValue(color) { let mergeState; if (this.hasValue(color)) { mergeState = color; } else if (this.hasValue(this.defaultValue)) { mergeState = this.defaultValue; } else { mergeState = defaultColor; } this.colorValue = generateColor(mergeState); this.setAlphaColor(this.colorValue); this.toRgbString = this.colorValue?.toRgbString() || ''; this.cdr.detectChanges(); } setAlphaColor(colorValue) { const rgb = generateColor(colorValue.toRgbString()); this.alphaColor = rgb.toRgbString(); this.gradientColors = ['rgba(255, 0, 4, 0) 0%', this.alphaColor]; this.cdr.markForCheck(); } handleChange(color, type) { this.setColorValue(color); this.nzOnChange.emit({ color, type }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgAntdColorPickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: NgAntdColorPickerComponent, isStandalone: true, selector: "ng-antd-color-picker", inputs: { value: "value", defaultValue: "defaultValue", panelRenderHeader: "panelRenderHeader", panelRenderFooter: "panelRenderFooter", disabledAlpha: ["disabledAlpha", "disabledAlpha", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { nzOnChange: "nzOnChange", nzOnChangeComplete: "nzOnChangeComplete" }, usesOnChanges: true, ngImport: i0, template: ` <div class="ant-color-picker-panel" [class.ant-color-picker-panel-disabled]="disabled"> @if (panelRenderHeader) { <ng-template [ngTemplateOutlet]="panelRenderHeader"></ng-template> } <color-picker [color]="colorValue" (nzOnChange)="handleChange($event)" [disabled]="disabled" (nzOnChangeComplete)="nzOnChangeComplete.emit($event)" ></color-picker> <div class="ant-color-picker-slider-container"> <div class="ant-color-picker-slider-group" [class.ant-color-picker-slider-group-disabled-alpha]="disabledAlpha"> <color-slider [color]="colorValue" [value]="'hsl(' + colorValue?.toHsb()?.h + ',100%, 50%)'" [gradientColors]="hueColor" (nzOnChange)="handleChange($event, 'hue')" [disabled]="disabled" (nzOnChangeComplete)="nzOnChangeComplete.emit($event)" ></color-slider> @if (!disabledAlpha) { <color-slider type="alpha" [color]="colorValue" [value]="toRgbString" [gradientColors]="gradientColors" (nzOnChange)="handleChange($event, 'alpha')" [disabled]="disabled" (nzOnChangeComplete)="nzOnChangeComplete.emit($event)" ></color-slider> } </div> <ng-antd-color-block [color]="toRgbString"></ng-antd-color-block> </div> @if (panelRenderFooter) { <ng-template [ngTemplateOutlet]="panelRenderFooter"></ng-template> } </div> `, isInline: true, dependencies: [{ kind: "component", type: PickerComponent, selector: "color-picker", inputs: ["color", "disabled"], outputs: ["nzOnChange", "nzOnChangeComplete"] }, { kind: "component", type: SliderComponent, selector: "color-slider", inputs: ["gradientColors", "direction", "type", "color", "value", "disabled"], outputs: ["nzOnChange", "nzOnChangeComplete"] }, { kind: "component", type: NgAntdColorBlockComponent, selector: "ng-antd-color-block", inputs: ["color"], outputs: ["nzOnClick"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgAntdColorPickerComponent, decorators: [{ type: Component, args: [{ // eslint-disable-next-line @angular-eslint/component-selector selector: 'ng-antd-color-picker', standalone: true, imports: [PickerComponent, SliderComponent, NgAntdColorBlockComponent, NgTemplateOutlet], template: ` <div class="ant-color-picker-panel" [class.ant-color-picker-panel-disabled]="disabled"> @if (panelRenderHeader) { <ng-template [ngTemplateOutlet]="panelRenderHeader"></ng-template> } <color-picker [color]="colorValue" (nzOnChange)="handleChange($event)" [disabled]="disabled" (nzOnChangeComplete)="nzOnChangeComplete.emit($event)" ></color-picker> <div class="ant-color-picker-slider-container"> <div class="ant-color-picker-slider-group" [class.ant-color-picker-slider-group-disabled-alpha]="disabledAlpha"> <color-slider [color]="colorValue" [value]="'hsl(' + colorValue?.toHsb()?.h + ',100%, 50%)'" [gradientColors]="hueColor" (nzOnChange)="handleChange($event, 'hue')" [disabled]="disabled" (nzOnChangeComplete)="nzOnChangeComplete.emit($event)" ></color-slider> @if (!disabledAlpha) { <color-slider type="alpha" [color]="colorValue" [value]="toRgbString" [gradientColors]="gradientColors" (nzOnChange)="handleChange($event, 'alpha')" [disabled]="disabled" (nzOnChangeComplete)="nzOnChangeComplete.emit($event)" ></color-slider> } </div> <ng-antd-color-block [color]="toRgbString"></ng-antd-color-block> </div> @if (panelRenderFooter) { <ng-template [ngTemplateOutlet]="panelRenderFooter"></ng-template> } </div> ` }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { value: [{ type: Input }], defaultValue: [{ type: Input }], nzOnChange: [{ type: Output }], nzOnChangeComplete: [{ type: Output }], panelRenderHeader: [{ type: Input }], panelRenderFooter: [{ type: Input }], disabledAlpha: [{ type: Input, args: [{ transform: booleanAttribute }] }], disabled: [{ type: Input, args: [{ transform: booleanAttribute }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYW50ZC1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci1waWNrZXIvc3JjL25nLWFudGQtY29sb3ItcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQWdEMUQsTUFBTSxPQUFPLDBCQUEwQjtJQTJCckMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF4QnZCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBMEMsQ0FBQztRQUN4RSx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNqRSxzQkFBaUIsR0FBNkIsSUFBSSxDQUFDO1FBQ25ELHNCQUFpQixHQUE2QixJQUFJLENBQUM7UUFDcEIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVsRSxlQUFVLEdBQWlCLElBQUksQ0FBQztRQUNoQyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBRXhCLGFBQVEsR0FBYTtZQUNuQixtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixzQkFBc0I7WUFDdEIsb0JBQW9CO1lB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Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDYSxVQUFVO3NCQUE1QixNQUFNO2dCQUNZLGtCQUFrQjtzQkFBcEMsTUFBTTtnQkFDRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNrQyxhQUFhO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGlkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb2xvcic7XG5pbXBvcnQgeyBDb2xvckdlbklucHV0LCBDb2xvclZhbHVlLCBIc2JhQ29sb3JUeXBlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3R5cGUnO1xuaW1wb3J0IHsgTmdBbnRkQ29sb3JCbG9ja0NvbXBvbmVudCB9IGZyb20gJy4vbmctYW50ZC1jb2xvci1ibG9jay5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmYXVsdENvbG9yLCBnZW5lcmF0ZUNvbG9yIH0gZnJvbSAnLi91dGlsL3V0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICduZy1hbnRkLWNvbG9yLXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtQaWNrZXJDb21wb25lbnQsIFNsaWRlckNvbXBvbmVudCwgTmdBbnRkQ29sb3JCbG9ja0NvbXBvbmVudCwgTmdUZW1wbGF0ZU91dGxldF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImFudC1jb2xvci1waWNrZXItcGFuZWxcIiBbY2xhc3MuYW50LWNvbG9yLXBpY2tlci1wYW5lbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgQGlmIChwYW5lbFJlbmRlckhlYWRlcikge1xuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwicGFuZWxSZW5kZXJIZWFkZXJcIj48L25nLXRlbXBsYXRlPlxuICAgICAgfVxuICAgICAgPGNvbG9yLXBpY2tlclxuICAgICAgICBbY29sb3JdPVwiY29sb3JWYWx1ZVwiXG4gICAgICAgIChuek9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgKG56T25DaGFuZ2VDb21wbGV0ZSk9XCJuek9uQ2hhbmdlQ29tcGxldGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgID48L2NvbG9yLXBpY2tlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhbnQtY29sb3ItcGlja2VyLXNsaWRlci1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFudC1jb2xvci1waWNrZXItc2xpZGVyLWdyb3VwXCIgW2NsYXNzLmFudC1jb2xvci1waWNrZXItc2xpZGVyLWdyb3VwLWRpc2FibGVkLWFscGhhXT1cImRpc2FibGVkQWxwaGFcIj5cbiAgICAgICAgICA8Y29sb3Itc2xpZGVyXG4gICAgICAgICAgICBbY29sb3JdPVwiY29sb3JWYWx1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiJ2hzbCgnICsgY29sb3JWYWx1ZT8udG9Ic2IoKT8uaCArICcsMTAwJSwgNTAlKSdcIlxuICAgICAgICAgICAgW2dyYWRpZW50Q29sb3JzXT1cImh1ZUNvbG9yXCJcbiAgICAgICAgICAgIChuek9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQsICdodWUnKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKG56T25DaGFuZ2VDb21wbGV0ZSk9XCJuek9uQ2hhbmdlQ29tcGxldGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9jb2xvci1zbGlkZXI+XG4gICAgICAgICAgQGlmICghZGlzYWJsZWRBbHBoYSkge1xuICAgICAgICAgICAgPGNvbG9yLXNsaWRlclxuICAgICAgICAgICAgICB0eXBlPVwiYWxwaGFcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JWYWx1ZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJ0b1JnYlN0cmluZ1wiXG4gICAgICAgICAgICAgIFtncmFkaWVudENvbG9yc109XCJncmFkaWVudENvbG9yc1wiXG4gICAgICAgICAgICAgIChuek9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQsICdhbHBoYScpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgKG56T25DaGFuZ2VDb21wbGV0ZSk9XCJuek9uQ2hhbmdlQ29tcGxldGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2NvbG9yLXNsaWRlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctYW50ZC1jb2xvci1ibG9jayBbY29sb3JdPVwidG9SZ2JTdHJpbmdcIj48L25nLWFudGQtY29sb3ItYmxvY2s+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAocGFuZWxSZW5kZXJGb290ZXIpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhbmVsUmVuZGVyRm9vdGVyXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ0FudGRDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdmFsdWU6IENvbG9yVmFsdWU7XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZTogQ29sb3JWYWx1ZTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56T25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sb3I6IENvbG9yOyB0eXBlPzogSHNiYUNvbG9yVHlwZSB9PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpPbkNoYW5nZUNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxIc2JhQ29sb3JUeXBlPigpO1xuICBASW5wdXQoKSBwYW5lbFJlbmRlckhlYWRlcjogVGVtcGxhdGVSZWY8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcGFuZWxSZW5kZXJGb290ZXI6IFRlbXBsYXRlUmVmPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZEFscGhhOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbG9yVmFsdWU6IENvbG9yIHwgbnVsbCA9IG51bGw7XG4gIGFscGhhQ29sb3I6IHN0cmluZyA9ICcnO1xuXG4gIGh1ZUNvbG9yOiBzdHJpbmdbXSA9IFtcbiAgICAncmdiKDI1NSwgMCwgMCkgMCUnLFxuICAgICdyZ2IoMjU1LCAyNTUsIDApIDE3JScsXG4gICAgJ3JnYigwLCAyNTUsIDApIDMzJScsXG4gICAgJ3JnYigwLCAyNTUsIDI1NSkgNTAlJyxcbiAgICAncmdiKDAsIDAsIDI1NSkgNjclJyxcbiAgICAncmdiKDI1NSwgMCwgMjU1KSA4MyUnLFxuICAgICdyZ2IoMjU1LCAwLCAwKSAxMDAlJ1xuICBdO1xuXG4gIGdyYWRpZW50Q29sb3JzOiBzdHJpbmdbXSA9IFsncmdiYSgyNTUsIDAsIDQsIDApIDAlJywgdGhpcy5hbHBoYUNvbG9yXTtcblxuICB0b1JnYlN0cmluZzogc3RyaW5nID0gdGhpcy5jb2xvclZhbHVlPy50b1JnYlN0cmluZygpIHx8ICcnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbG9yVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZGVmYXVsdFZhbHVlIH0gPSBjaGFuZ2VzO1xuICAgIGlmICh2YWx1ZSB8fCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3JWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBoYXNWYWx1ZSh2YWx1ZTogQ29sb3JWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXZhbHVlO1xuICB9XG5cbiAgc2V0Q29sb3JWYWx1ZShjb2xvcjogQ29sb3JWYWx1ZSk6IHZvaWQge1xuICAgIGxldCBtZXJnZVN0YXRlO1xuICAgIGlmICh0aGlzLmhhc1ZhbHVlKGNvbG9yKSkge1xuICAgICAgbWVyZ2VTdGF0ZSA9IGNvbG9yO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIG1lcmdlU3RhdGUgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VTdGF0ZSA9IGRlZmF1bHRDb2xvcjtcbiAgICB9XG4gICAgdGhpcy5jb2xvclZhbHVlID0gZ2VuZXJhdGVDb2xvcihtZXJnZVN0YXRlIGFzIENvbG9yR2VuSW5wdXQpO1xuICAgIHRoaXMuc2V0QWxwaGFDb2xvcih0aGlzLmNvbG9yVmFsdWUpO1xuICAgIHRoaXMudG9SZ2JTdHJpbmcgPSB0aGlzLmNvbG9yVmFsdWU/LnRvUmdiU3RyaW5nKCkgfHwgJyc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2V0QWxwaGFDb2xvcihjb2xvclZhbHVlOiBDb2xvcik6IHZvaWQge1xuICAgIGNvbnN0IHJnYiA9IGdlbmVyYXRlQ29sb3IoY29sb3JWYWx1ZS50b1JnYlN0cmluZygpKTtcbiAgICB0aGlzLmFscGhhQ29sb3IgPSByZ2IudG9SZ2JTdHJpbmcoKTtcbiAgICB0aGlzLmdyYWRpZW50Q29sb3JzID0gWydyZ2JhKDI1NSwgMCwgNCwgMCkgMCUnLCB0aGlzLmFscGhhQ29sb3JdO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGNvbG9yOiBDb2xvciwgdHlwZT86IEhzYmFDb2xvclR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbG9yVmFsdWUoY29sb3IpO1xuICAgIHRoaXMubnpPbkNoYW5nZS5lbWl0KHsgY29sb3IsIHR5cGUgfSk7XG4gIH1cbn1cbiJdfQ==