@alauda-fe/common
Version:
Alauda frontend team common codes.
233 lines (232 loc) • 19.2 kB
JavaScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
import { Subject, merge, map, takeUntil } from 'rxjs';
import { ContextChartService } from '../../chart.service';
import { Orientation } from '../../types';
import * as i0 from "@angular/core";
import * as i1 from "../../chart.service";
const _c0 = ["aclYAxisTicks", ""];
function YAxisTicksComponent_ng_container_0__svg_g_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(0, "g")(1, "text", 4);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "pure");
i0.ɵɵelementEnd();
i0.ɵɵelement(4, "line", 5)(5, "line", 6);
i0.ɵɵelementEnd();
} if (rf & 2) {
const tick_r1 = ctx.$implicit;
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵattribute("y", tick_r1.y);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind2(3, 8, tick_r1.value, ctx_r1.conversionMaximum), "", ctx_r1.suffix, " ");
i0.ɵɵadvance(2);
i0.ɵɵattribute("y1", tick_r1.y)("y2", tick_r1.y);
i0.ɵɵadvance();
i0.ɵɵattribute("x2", ctx_r1.context == null ? null : ctx_r1.context.chartView == null ? null : ctx_r1.context.chartView.width)("y1", tick_r1.y)("y2", tick_r1.y);
} }
function YAxisTicksComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, YAxisTicksComponent_ng_container_0__svg_g_1_Template, 6, 11, "g", 2);
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(2, "g");
i0.ɵɵelement(3, "path", 3);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", ctx_r1.ticks);
i0.ɵɵadvance(2);
i0.ɵɵattribute("d", ctx_r1.yAxisLine);
} }
function YAxisTicksComponent_ng_template_1__svg_g_0__svg_line_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelement(0, "line", 9);
} if (rf & 2) {
const tick_r3 = i0.ɵɵnextContext().$implicit;
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵattribute("x1", tick_r3.x)("x2", tick_r3.x)("y1", 0)("y2", -(ctx_r1.context == null ? null : ctx_r1.context.chartView == null ? null : ctx_r1.context.chartView.height));
} }
function YAxisTicksComponent_ng_template_1__svg_g_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(0, "g")(1, "text", 7);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "pure");
i0.ɵɵelementEnd();
i0.ɵɵtemplate(4, YAxisTicksComponent_ng_template_1__svg_g_0__svg_line_4_Template, 1, 4, "line", 8);
i0.ɵɵelementEnd();
} if (rf & 2) {
const tick_r3 = ctx.$implicit;
const i_r4 = ctx.index;
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵattribute("x", i_r4 === 0 && ctx_r1.suffix ? tick_r3.x - 5 : tick_r3.x)("y", tick_r3.y + 16)("text-anchor", ctx_r1.textAnchor);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind2(3, 6, tick_r3.value, ctx_r1.conversionMaximum), "", ctx_r1.suffix, " ");
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", i_r4 !== ctx_r1.ticks.length - 1);
} }
function YAxisTicksComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, YAxisTicksComponent_ng_template_1__svg_g_0_Template, 5, 9, "g", 2);
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(1, "g");
i0.ɵɵelement(2, "path", 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("ngForOf", ctx_r1.ticks);
i0.ɵɵadvance(2);
i0.ɵɵattribute("d", ctx_r1.xAxisLine);
} }
export class YAxisTicksComponent {
get yAxisLine() {
return `M${0} ${0}L${0} ${this.context.chartView.height}Z`;
}
get xAxisLine() {
const { width } = this.context.chartView;
return `M0 0L${width} 0Z`;
}
getTicks() {
const ticks = this.context.y.ticks(this.getMaxTicks(this.intervalWidth));
return ticks.map(value => {
const res = this.context.y(value);
return {
value,
y: this.context.horizontal ? 0 : res,
x: res,
};
});
}
getMaxTicks(tickHeight) {
const height = this.context.horizontal
? this.context.chartView.width
: this.context.chartView.height;
return Math.floor(height / tickHeight);
}
constructor(context, cd) {
this.context = context;
this.cd = cd;
this.intervalWidth = 40;
this.orientation = Orientation;
this.textAnchor = 'middle';
this.destroy$$ = new Subject();
}
ngOnInit() {
this.ticks = this.getTicks();
this.cd.detectChanges();
merge(this.context.seriesData$, this.context.legendChange$$)
.pipe(takeUntil(this.destroy$$), map(() => this.getTicks()))
.subscribe(res => {
this.ticks = res;
this.cd.detectChanges();
});
}
conversionMaximum(value) {
const unit = 'k';
if (value >= 1000) {
const num = +(value / 1000).toFixed(2);
return `${num}${unit}`;
}
return value;
}
ngOnDestroy() {
this.destroy$$.next();
}
static { this.ɵfac = function YAxisTicksComponent_Factory(t) { return new (t || YAxisTicksComponent)(i0.ɵɵdirectiveInject(i1.ContextChartService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: YAxisTicksComponent, selectors: [["g", "aclYAxisTicks", ""]], inputs: { intervalWidth: "intervalWidth", suffix: "suffix" }, attrs: _c0, decls: 3, vars: 2, consts: [["elseTemplate", ""], [4, "ngIf", "ngIfElse"], [4, "ngFor", "ngForOf"], ["stroke", "#ccd6eb", "fill", "none"], ["x", "-8", "fill", "#666", "text-anchor", "end", "font-size", "11", "alignment-baseline", "middle"], ["x1", "-4", "x2", "0", "stroke-width", "1", "stroke", "#ccd6eb"], ["x1", "0", "stroke-width", "1", "stroke-dasharray", "4 1", "stroke", "#e8e8e8"], ["fill", "#666", "font-size", "11"], ["stroke-width", "1", "stroke-dasharray", "4 1", "stroke", "#e8e8e8", 4, "ngIf"], ["stroke-width", "1", "stroke-dasharray", "4 1", "stroke", "#e8e8e8"]], template: function YAxisTicksComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, YAxisTicksComponent_ng_container_0_Template, 4, 2, "ng-container", 1)(1, YAxisTicksComponent_ng_template_1_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
const elseTemplate_r5 = i0.ɵɵreference(2);
i0.ɵɵproperty("ngIf", ctx.context.barOptions.orientation === ctx.orientation.VERTICAL)("ngIfElse", elseTemplate_r5);
} }, encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(YAxisTicksComponent, [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'g[aclYAxisTicks]',
template: `
<ng-container
*ngIf="
context.barOptions.orientation === orientation.VERTICAL;
else elseTemplate
"
>
<svg:g *ngFor="let tick of ticks">
<text
x="-8"
[attr.y]="tick.y"
fill="#666"
text-anchor="end"
font-size="11"
alignment-baseline="middle"
>
{{ tick.value | pure: conversionMaximum }}{{ suffix }}
</text>
<line
x1="-4"
x2="0"
[attr.y1]="tick.y"
[attr.y2]="tick.y"
stroke-width="1"
stroke="#ccd6eb"
></line>
<line
x1="0"
[attr.x2]="context?.chartView?.width"
[attr.y1]="tick.y"
[attr.y2]="tick.y"
stroke-width="1"
stroke-dasharray="4 1"
stroke="#e8e8e8"
></line>
</svg:g>
<svg:g>
<path
[attr.d]="yAxisLine"
stroke="#ccd6eb"
fill="none"
/>
</svg:g>
</ng-container>
<ng-template #elseTemplate>
<svg:g *ngFor="let tick of ticks; let i = index">
<text
[attr.x]="i === 0 && suffix ? tick.x - 5 : tick.x"
[attr.y]="tick.y + 16"
fill="#666"
[attr.text-anchor]="textAnchor"
font-size="11"
>
{{ tick.value | pure: conversionMaximum }}{{ suffix }}
</text>
<line
*ngIf="i !== ticks.length - 1"
[attr.x1]="tick.x"
[attr.x2]="tick.x"
[attr.y1]="0"
[attr.y2]="-context?.chartView?.height"
stroke-width="1"
stroke-dasharray="4 1"
stroke="#e8e8e8"
></line>
</svg:g>
<svg:g>
<path
[attr.d]="xAxisLine"
stroke="#ccd6eb"
fill="none"
/>
</svg:g>
</ng-template>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], () => [{ type: i1.ContextChartService }, { type: i0.ChangeDetectorRef }], { intervalWidth: [{
type: Input
}], suffix: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(YAxisTicksComponent, { className: "YAxisTicksComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieS1heGlzLXRpY2tzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jaGFydC9jb21tb24vYXhpcy95LWF4aXMtdGlja3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7SUFhbEMsQUFERix5QkFBa0MsY0FRL0I7SUFDQyxZQUNGOztJQUFBLGlCQUFPO0lBU1AsQUFSQSwwQkFPUSxjQVNBO0lBQ1YsaUJBQVE7Ozs7SUF6QkosY0FBaUI7O0lBTWpCLGNBQ0Y7SUFERSxpSEFDRjtJQUlFLGVBQWtCOztJQU9sQixjQUFxQzs7OztJQTNCM0MsNkJBS0M7SUFDQyxxRkFBa0M7O0lBNkJsQyx5QkFBTztJQUNMLDBCQUlFO0lBQ0osaUJBQVE7Ozs7SUFuQ2dCLGNBQVE7SUFBUixzQ0FBUTtJQStCNUIsZUFBb0I7Ozs7O0lBa0J0QiwwQkFTUTs7Ozs7Ozs7SUFsQlIsQUFERix5QkFBaUQsY0FPOUM7SUFDQyxZQUNGOztJQUFBLGlCQUFPO0lBQ1Asa0dBU0M7SUFDSCxpQkFBUTs7Ozs7SUFsQkosY0FBa0Q7O0lBTWxELGNBQ0Y7SUFERSxpSEFDRjtJQUVHLGVBQTRCO0lBQTVCLHVEQUE0Qjs7O0lBWGpDLG1GQUFpRDs7SUFxQmpELHlCQUFPO0lBQ0wsMEJBSUU7SUFDSixpQkFBUTs7O0lBM0JnQixzQ0FBVTtJQXVCOUIsZUFBb0I7OztB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Q0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztvRkFyRVUsbUJBQW1CO29FQUFuQixtQkFBbUI7WUFqQzVCLEFBNUNBLHNGQUtDLHdHQXVDMEI7OztZQXpDZCxBQUZWLHNGQUVVLDZCQUVqQjs7O2lGQXdFYSxtQkFBbUI7Y0FqRi9CLFNBQVM7ZUFBQztnQkFDVCw4REFBOEQ7Z0JBQzlELFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkVUO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO29GQUVVLGFBQWE7a0JBQXJCLEtBQUs7WUFFRyxNQUFNO2tCQUFkLEtBQUs7O2tGQUhLLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgbWVyZ2UsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENvbnRleHRDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IE9yaWVudGF0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdnW2FjbFlBeGlzVGlja3NdJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBjb250ZXh0LmJhck9wdGlvbnMub3JpZW50YXRpb24gPT09IG9yaWVudGF0aW9uLlZFUlRJQ0FMO1xuICAgICAgICBlbHNlIGVsc2VUZW1wbGF0ZVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8c3ZnOmcgKm5nRm9yPVwibGV0IHRpY2sgb2YgdGlja3NcIj5cbiAgICAgICAgPHRleHRcbiAgICAgICAgICB4PVwiLThcIlxuICAgICAgICAgIFthdHRyLnldPVwidGljay55XCJcbiAgICAgICAgICBmaWxsPVwiIzY2NlwiXG4gICAgICAgICAgdGV4dC1hbmNob3I9XCJlbmRcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjExXCJcbiAgICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGljay52YWx1ZSB8IHB1cmU6IGNvbnZlcnNpb25NYXhpbXVtIH19e3sgc3VmZml4IH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgPGxpbmVcbiAgICAgICAgICB4MT1cIi00XCJcbiAgICAgICAgICB4Mj1cIjBcIlxuICAgICAgICAgIFthdHRyLnkxXT1cInRpY2sueVwiXG4gICAgICAgICAgW2F0dHIueTJdPVwidGljay55XCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICBzdHJva2U9XCIjY2NkNmViXCJcbiAgICAgICAgPjwvbGluZT5cbiAgICAgICAgPGxpbmVcbiAgICAgICAgICB4MT1cIjBcIlxuICAgICAgICAgIFthdHRyLngyXT1cImNvbnRleHQ/LmNoYXJ0Vmlldz8ud2lkdGhcIlxuICAgICAgICAgIFthdHRyLnkxXT1cInRpY2sueVwiXG4gICAgICAgICAgW2F0dHIueTJdPVwidGljay55XCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiNCAxXCJcbiAgICAgICAgICBzdHJva2U9XCIjZThlOGU4XCJcbiAgICAgICAgPjwvbGluZT5cbiAgICAgIDwvc3ZnOmc+XG4gICAgICA8c3ZnOmc+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgW2F0dHIuZF09XCJ5QXhpc0xpbmVcIlxuICAgICAgICAgIHN0cm9rZT1cIiNjY2Q2ZWJcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnOmc+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cbiAgICAgIDxzdmc6ZyAqbmdGb3I9XCJsZXQgdGljayBvZiB0aWNrczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiaSA9PT0gMCAmJiBzdWZmaXggPyB0aWNrLnggLSA1IDogdGljay54XCJcbiAgICAgICAgICBbYXR0ci55XT1cInRpY2sueSArIDE2XCJcbiAgICAgICAgICBmaWxsPVwiIzY2NlwiXG4gICAgICAgICAgW2F0dHIudGV4dC1hbmNob3JdPVwidGV4dEFuY2hvclwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTFcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGljay52YWx1ZSB8IHB1cmU6IGNvbnZlcnNpb25NYXhpbXVtIH19e3sgc3VmZml4IH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgPGxpbmVcbiAgICAgICAgICAqbmdJZj1cImkgIT09IHRpY2tzLmxlbmd0aCAtIDFcIlxuICAgICAgICAgIFthdHRyLngxXT1cInRpY2sueFwiXG4gICAgICAgICAgW2F0dHIueDJdPVwidGljay54XCJcbiAgICAgICAgICBbYXR0ci55MV09XCIwXCJcbiAgICAgICAgICBbYXR0ci55Ml09XCItY29udGV4dD8uY2hhcnRWaWV3Py5oZWlnaHRcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9XCI0IDFcIlxuICAgICAgICAgIHN0cm9rZT1cIiNlOGU4ZThcIlxuICAgICAgICA+PC9saW5lPlxuICAgICAgPC9zdmc6Zz5cbiAgICAgIDxzdmc6Zz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBbYXR0ci5kXT1cInhBeGlzTGluZVwiXG4gICAgICAgICAgc3Ryb2tlPVwiI2NjZDZlYlwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc6Zz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgWUF4aXNUaWNrc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgaW50ZXJ2YWxXaWR0aCA9IDQwO1xuXG4gIEBJbnB1dCgpIHN1ZmZpeDogc3RyaW5nO1xuXG4gIHRpY2tzOiBBcnJheTx7IHZhbHVlOiBudW1iZXI7IHk6IG51bWJlcjsgeDogbnVtYmVyIH0+O1xuICBvcmllbnRhdGlvbiA9IE9yaWVudGF0aW9uO1xuICB0ZXh0QW5jaG9yID0gJ21pZGRsZSc7XG5cbiAgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXQgeUF4aXNMaW5lKCkge1xuICAgIHJldHVybiBgTSR7MH0gJHswfUwkezB9ICR7dGhpcy5jb250ZXh0LmNoYXJ0Vmlldy5oZWlnaHR9WmA7XG4gIH1cblxuICBnZXQgeEF4aXNMaW5lKCkge1xuICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY29udGV4dC5jaGFydFZpZXc7XG4gICAgcmV0dXJuIGBNMCAwTCR7d2lkdGh9IDBaYDtcbiAgfVxuXG4gIGdldFRpY2tzKCkge1xuICAgIGNvbnN0IHRpY2tzID0gdGhpcy5jb250ZXh0LnkudGlja3ModGhpcy5nZXRNYXhUaWNrcyh0aGlzLmludGVydmFsV2lkdGgpKTtcbiAgICByZXR1cm4gdGlja3MubWFwKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY29udGV4dC55KHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICB5OiB0aGlzLmNvbnRleHQuaG9yaXpvbnRhbCA/IDAgOiByZXMsXG4gICAgICAgIHg6IHJlcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRNYXhUaWNrcyh0aWNrSGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY29udGV4dC5ob3Jpem9udGFsXG4gICAgICA/IHRoaXMuY29udGV4dC5jaGFydFZpZXcud2lkdGhcbiAgICAgIDogdGhpcy5jb250ZXh0LmNoYXJ0Vmlldy5oZWlnaHQ7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoaGVpZ2h0IC8gdGlja0hlaWdodCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dDogQ29udGV4dENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudGlja3MgPSB0aGlzLmdldFRpY2tzKCk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgbWVyZ2UodGhpcy5jb250ZXh0LnNlcmllc0RhdGEkLCB0aGlzLmNvbnRleHQubGVnZW5kQ2hhbmdlJCQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZ2V0VGlja3MoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudGlja3MgPSByZXM7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBjb252ZXJzaW9uTWF4aW11bSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgdW5pdCA9ICdrJztcbiAgICBpZiAodmFsdWUgPj0gMTAwMCkge1xuICAgICAgY29uc3QgbnVtID0gKyh2YWx1ZSAvIDEwMDApLnRvRml4ZWQoMik7XG4gICAgICByZXR1cm4gYCR7bnVtfSR7dW5pdH1gO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkJC5uZXh0KCk7XG4gIH1cbn1cbiJdfQ==