ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
182 lines • 19.2 kB
JavaScript
/**
* 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">
(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>
(!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>
(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">
(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>
(!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>
(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==