ng-antd-color-picker
Version:
The angular version of the color-picker component based on antd styles.
175 lines • 18.5 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { defaultColor, generateColor } from './util/util';
import { NgIf, NgTemplateOutlet } from '@angular/common';
import { PickerComponent } from './components/picker.component';
import { SliderComponent } from './components/slider.component';
import { NgAntdColorBlockComponent } from './ng-antd-color-block.component';
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: "17.0.1", ngImport: i0, type: NgAntdColorPickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: NgAntdColorPickerComponent, isStandalone: true, selector: "ng-antd-color-picker", inputs: { value: "value", defaultValue: "defaultValue", panelRenderHeader: "panelRenderHeader", panelRenderFooter: "panelRenderFooter", disabledAlpha: "disabledAlpha", disabled: "disabled" }, outputs: { nzOnChange: "nzOnChange", nzOnChangeComplete: "nzOnChangeComplete" }, usesOnChanges: true, ngImport: i0, template: `
<div class="ant-color-picker-panel" [class.ant-color-picker-panel-disabled]="disabled">
<ng-container *ngIf="panelRenderHeader">
<ng-template [ngTemplateOutlet]="panelRenderHeader"></ng-template>
</ng-container>
<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>
<ng-container *ngIf="!disabledAlpha">
<color-slider
type="alpha"
[color]="colorValue"
[value]="toRgbString"
[gradientColors]="gradientColors"
(nzOnChange)="handleChange($event, 'alpha')"
[disabled]="disabled"
(nzOnChangeComplete)="nzOnChangeComplete.emit($event)"
></color-slider>
</ng-container>
</div>
<ng-antd-color-block [color]="toRgbString"></ng-antd-color-block>
</div>
<ng-container *ngIf="panelRenderFooter">
<ng-template [ngTemplateOutlet]="panelRenderFooter"></ng-template>
</ng-container>
</div>
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "17.0.1", ngImport: i0, type: NgAntdColorPickerComponent, decorators: [{
type: Component,
args: [{
selector: 'ng-antd-color-picker',
standalone: true,
imports: [NgIf, PickerComponent, SliderComponent, NgAntdColorBlockComponent, NgTemplateOutlet],
template: `
<div class="ant-color-picker-panel" [class.ant-color-picker-panel-disabled]="disabled">
<ng-container *ngIf="panelRenderHeader">
<ng-template [ngTemplateOutlet]="panelRenderHeader"></ng-template>
</ng-container>
<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>
<ng-container *ngIf="!disabledAlpha">
<color-slider
type="alpha"
[color]="colorValue"
[value]="toRgbString"
[gradientColors]="gradientColors"
(nzOnChange)="handleChange($event, 'alpha')"
[disabled]="disabled"
(nzOnChangeComplete)="nzOnChangeComplete.emit($event)"
></color-slider>
</ng-container>
</div>
<ng-antd-color-block [color]="toRgbString"></ng-antd-color-block>
</div>
<ng-container *ngIf="panelRenderFooter">
<ng-template [ngTemplateOutlet]="panelRenderFooter"></ng-template>
</ng-container>
</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
}], disabled: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYW50ZC1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYW50ZC1jb2xvci1waWNrZXIvc3JjL2xpYi9uZy1hbnRkLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUErQzVFLE1BQU0sT0FBTywwQkFBMEI7SUEyQnJDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEJoQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFDeEUsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDeEQsc0JBQWlCLEdBQTZCLElBQUksQ0FBQztRQUNuRCxzQkFBaUIsR0FBNkIsSUFBSSxDQUFDO1FBQ25ELGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFbkMsZUFBVSxHQUFpQixJQUFJLENBQUM7UUFDaEMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUV4QixhQUFRLEdBQWE7WUFDbkIsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0QixvQkFBb0I7WUFDcEIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixz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TUFBTTtnQkFDRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sb3JHZW5JbnB1dCwgQ29sb3JWYWx1ZSwgSHNiYUNvbG9yVHlwZSB9IGZyb20gJy4vaW50ZXJmYWNlcy90eXBlJztcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbG9yJztcbmltcG9ydCB7IGRlZmF1bHRDb2xvciwgZ2VuZXJhdGVDb2xvciB9IGZyb20gJy4vdXRpbC91dGlsJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NsaWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdBbnRkQ29sb3JCbG9ja0NvbXBvbmVudCB9IGZyb20gJy4vbmctYW50ZC1jb2xvci1ibG9jay5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1hbnRkLWNvbG9yLXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0lmLCBQaWNrZXJDb21wb25lbnQsIFNsaWRlckNvbXBvbmVudCwgTmdBbnRkQ29sb3JCbG9ja0NvbXBvbmVudCwgTmdUZW1wbGF0ZU91dGxldF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImFudC1jb2xvci1waWNrZXItcGFuZWxcIiBbY2xhc3MuYW50LWNvbG9yLXBpY2tlci1wYW5lbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsUmVuZGVySGVhZGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwYW5lbFJlbmRlckhlYWRlclwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxjb2xvci1waWNrZXJcbiAgICAgICAgW2NvbG9yXT1cImNvbG9yVmFsdWVcIlxuICAgICAgICAobnpPbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChuek9uQ2hhbmdlQ29tcGxldGUpPVwibnpPbkNoYW5nZUNvbXBsZXRlLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+PC9jb2xvci1waWNrZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYW50LWNvbG9yLXBpY2tlci1zbGlkZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnQtY29sb3ItcGlja2VyLXNsaWRlci1ncm91cFwiIFtjbGFzcy5hbnQtY29sb3ItcGlja2VyLXNsaWRlci1ncm91cC1kaXNhYmxlZC1hbHBoYV09XCJkaXNhYmxlZEFscGhhXCI+XG4gICAgICAgICAgPGNvbG9yLXNsaWRlclxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yVmFsdWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIidoc2woJyArIGNvbG9yVmFsdWU/LnRvSHNiKCk/LmggKyAnLDEwMCUsIDUwJSknXCJcbiAgICAgICAgICAgIFtncmFkaWVudENvbG9yc109XCJodWVDb2xvclwiXG4gICAgICAgICAgICAobnpPbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50LCAnaHVlJylcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChuek9uQ2hhbmdlQ29tcGxldGUpPVwibnpPbkNoYW5nZUNvbXBsZXRlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvY29sb3Itc2xpZGVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGlzYWJsZWRBbHBoYVwiPlxuICAgICAgICAgICAgPGNvbG9yLXNsaWRlclxuICAgICAgICAgICAgICB0eXBlPVwiYWxwaGFcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JWYWx1ZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJ0b1JnYlN0cmluZ1wiXG4gICAgICAgICAgICAgIFtncmFkaWVudENvbG9yc109XCJncmFkaWVudENvbG9yc1wiXG4gICAgICAgICAgICAgIChuek9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQsICdhbHBoYScpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgKG56T25DaGFuZ2VDb21wbGV0ZSk9XCJuek9uQ2hhbmdlQ29tcGxldGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2NvbG9yLXNsaWRlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1hbnRkLWNvbG9yLWJsb2NrIFtjb2xvcl09XCJ0b1JnYlN0cmluZ1wiPjwvbmctYW50ZC1jb2xvci1ibG9jaz5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsUmVuZGVyRm9vdGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwYW5lbFJlbmRlckZvb3RlclwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ0FudGRDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdmFsdWU6IENvbG9yVmFsdWU7XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZTogQ29sb3JWYWx1ZTtcbiAgQE91dHB1dCgpIG56T25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sb3I6IENvbG9yOyB0eXBlPzogSHNiYUNvbG9yVHlwZSB9PigpO1xuICBAT3V0cHV0KCkgbnpPbkNoYW5nZUNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxIc2JhQ29sb3JUeXBlPigpO1xuICBASW5wdXQoKSBwYW5lbFJlbmRlckhlYWRlcjogVGVtcGxhdGVSZWY8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcGFuZWxSZW5kZXJGb290ZXI6IFRlbXBsYXRlUmVmPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGRpc2FibGVkQWxwaGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb2xvclZhbHVlOiBDb2xvciB8IG51bGwgPSBudWxsO1xuICBhbHBoYUNvbG9yOiBzdHJpbmcgPSAnJztcblxuICBodWVDb2xvcjogc3RyaW5nW10gPSBbXG4gICAgJ3JnYigyNTUsIDAsIDApIDAlJyxcbiAgICAncmdiKDI1NSwgMjU1LCAwKSAxNyUnLFxuICAgICdyZ2IoMCwgMjU1LCAwKSAzMyUnLFxuICAgICdyZ2IoMCwgMjU1LCAyNTUpIDUwJScsXG4gICAgJ3JnYigwLCAwLCAyNTUpIDY3JScsXG4gICAgJ3JnYigyNTUsIDAsIDI1NSkgODMlJyxcbiAgICAncmdiKDI1NSwgMCwgMCkgMTAwJSdcbiAgXTtcblxuICBncmFkaWVudENvbG9yczogc3RyaW5nW10gPSBbJ3JnYmEoMjU1LCAwLCA0LCAwKSAwJScsIHRoaXMuYWxwaGFDb2xvcl07XG5cbiAgdG9SZ2JTdHJpbmc6IHN0cmluZyA9IHRoaXMuY29sb3JWYWx1ZT8udG9SZ2JTdHJpbmcoKSB8fCAnJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb2xvclZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgdmFsdWUsIGRlZmF1bHRWYWx1ZSB9ID0gY2hhbmdlcztcbiAgICBpZiAodmFsdWUgfHwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnNldENvbG9yVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFzVmFsdWUodmFsdWU6IENvbG9yVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWx1ZTtcbiAgfVxuXG4gIHNldENvbG9yVmFsdWUoY29sb3I6IENvbG9yVmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgbWVyZ2VTdGF0ZTtcbiAgICBpZiAodGhpcy5oYXNWYWx1ZShjb2xvcikpIHtcbiAgICAgIG1lcmdlU3RhdGUgPSBjb2xvcjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICBtZXJnZVN0YXRlID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlU3RhdGUgPSBkZWZhdWx0Q29sb3I7XG4gICAgfVxuICAgIHRoaXMuY29sb3JWYWx1ZSA9IGdlbmVyYXRlQ29sb3IobWVyZ2VTdGF0ZSBhcyBDb2xvckdlbklucHV0KTtcbiAgICB0aGlzLnNldEFscGhhQ29sb3IodGhpcy5jb2xvclZhbHVlKTtcbiAgICB0aGlzLnRvUmdiU3RyaW5nID0gdGhpcy5jb2xvclZhbHVlPy50b1JnYlN0cmluZygpIHx8ICcnO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldEFscGhhQ29sb3IoY29sb3JWYWx1ZTogQ29sb3IpOiB2b2lkIHtcbiAgICBjb25zdCByZ2IgPSBnZW5lcmF0ZUNvbG9yKGNvbG9yVmFsdWUudG9SZ2JTdHJpbmcoKSk7XG4gICAgdGhpcy5hbHBoYUNvbG9yID0gcmdiLnRvUmdiU3RyaW5nKCk7XG4gICAgdGhpcy5ncmFkaWVudENvbG9ycyA9IFsncmdiYSgyNTUsIDAsIDQsIDApIDAlJywgdGhpcy5hbHBoYUNvbG9yXTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShjb2xvcjogQ29sb3IsIHR5cGU/OiBIc2JhQ29sb3JUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb2xvclZhbHVlKGNvbG9yKTtcbiAgICB0aGlzLm56T25DaGFuZ2UuZW1pdCh7IGNvbG9yLCB0eXBlIH0pO1xuICB9XG59XG4iXX0=