@alauda-fe/common
Version:
Alauda frontend team common codes.
258 lines • 33.7 kB
JavaScript
import { View, LEGEND_EVENTS, VIEW_HOOKS, } from '@alauda/chart';
import { isTemplateRef } from '@alauda/ui';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
import { get } from 'lodash-es';
import * as i0 from "@angular/core";
const _c0 = a0 => ({ context: a0 });
const _c1 = a0 => [a0, "label-symbol"];
function LegendComponent_div_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 5);
i0.ɵɵelementContainer(1, 6);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.leftOperation)("ngTemplateOutletContext", ctx_r0.leftOperationContext);
} }
function LegendComponent_div_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementContainer(1, 9);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵnextContext(2);
const legendTemplate_r2 = i0.ɵɵreference(4);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", legendTemplate_r2);
} }
function LegendComponent_div_1_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementContainer(1, 6);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(3);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r0.legendEntries));
} }
function LegendComponent_div_1_ng_template_2_ng_template_1_acl_legend_dropdown_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "acl-legend-dropdown", 12);
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(4);
const legendTemplate_r2 = i0.ɵɵreference(4);
i0.ɵɵproperty("data", ctx_r0.legendEntries)("noData", ctx_r0.noData)("legendTemplate", legendTemplate_r2)("isCard", ctx_r0.mode === "card");
} }
function LegendComponent_div_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0, 10);
i0.ɵɵtemplate(1, LegendComponent_div_1_ng_template_2_ng_template_1_acl_legend_dropdown_1_Template, 1, 4, "acl-legend-dropdown", 11);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(3);
i0.ɵɵproperty("ngSwitch", ctx_r0.template);
i0.ɵɵadvance();
i0.ɵɵproperty("ngSwitchCase", "dropdown");
} }
function LegendComponent_div_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, LegendComponent_div_1_ng_template_2_ng_container_0_Template, 2, 4, "ng-container", 8)(1, LegendComponent_div_1_ng_template_2_ng_template_1_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
const builtinTemplate_r3 = i0.ɵɵreference(2);
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("ngIf", ctx_r0.isTemplateRef(ctx_r0.template))("ngIfElse", builtinTemplate_r3);
} }
function LegendComponent_div_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 7);
i0.ɵɵtemplate(1, LegendComponent_div_1_ng_container_1_Template, 2, 1, "ng-container", 8)(2, LegendComponent_div_1_ng_template_2_Template, 3, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementEnd();
} if (rf & 2) {
const custom_r4 = i0.ɵɵreference(3);
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", !ctx_r0.template)("ngIfElse", custom_r4);
} }
function LegendComponent_div_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 5);
i0.ɵɵelementContainer(1, 9);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.rightOperation);
} }
function LegendComponent_ng_template_3_li_1_Template(rf, ctx) { if (rf & 1) {
const _r5 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "li", 16)(1, "aui-checkbox", 17);
i0.ɵɵtwoWayListener("ngModelChange", function LegendComponent_ng_template_3_li_1_Template_aui_checkbox_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.allSelected, $event) || (ctx_r0.allSelected = $event); return i0.ɵɵresetView($event); });
i0.ɵɵlistener("ngModelChange", function LegendComponent_ng_template_3_li_1_Template_aui_checkbox_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.allSelect($event)); });
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.allSelected);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", ctx_r0.selectAllName || i0.ɵɵpipeBind1(3, 2, "select_all"), " ");
} }
function LegendComponent_ng_template_3_li_2_Template(rf, ctx) { if (rf & 1) {
const _r6 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "li", 18);
i0.ɵɵpipe(1, "translate");
i0.ɵɵlistener("click", function LegendComponent_ng_template_3_li_2_Template_li_click_0_listener() { const legend_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selected(legend_r7)); });
i0.ɵɵelement(2, "span", 19);
i0.ɵɵelementStart(3, "span", 20);
i0.ɵɵtext(4);
i0.ɵɵpipe(5, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const legend_r7 = ctx.$implicit;
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵclassProp("disable", !legend_r7.activate || ctx_r0.noData)("forbid", ctx_r0.noData);
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(1, 9, legend_r7.activate ? "click_hide" : "click_show"));
i0.ɵɵadvance(2);
i0.ɵɵstyleProp("background", legend_r7.color);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(13, _c1, ctx_r0.symbolName));
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r0.translation ? i0.ɵɵpipeBind1(5, 11, legend_r7.name) : legend_r7.name);
} }
function LegendComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "ul", 13);
i0.ɵɵtemplate(1, LegendComponent_ng_template_3_li_1_Template, 4, 4, "li", 14)(2, LegendComponent_ng_template_3_li_2_Template, 6, 15, "li", 15);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", !ctx_r0.noData && ctx_r0.selectAllOperation && ctx_r0.template === "dropdown");
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", ctx_r0.legendEntries);
} }
export class LegendPayload {
}
export class LegendComponent {
get noData() {
return this.legendEntries?.length === 0 || !this.legendEntries;
}
get legendInstance() {
return this.chart?.getController('legend');
}
get symbolName() {
return `symbol-${this.symbol}`;
}
constructor(cdr) {
this.cdr = cdr;
this.symbol = 'line';
this.mode = 'default';
this.translation = true;
this.selectAllOperation = false;
this.changeLegend = new EventEmitter();
this.legendEntries = [];
this.isTemplateRef = isTemplateRef;
this.allSelected = true;
}
ngOnChanges({ chart }) {
if (chart.currentValue) {
this.legendEntries = this.legendInstance?.legendItems;
}
}
ngOnInit() {
this.legendEntries = this.legendInstance?.legendItems;
this.chart?.on(VIEW_HOOKS.SET_DATA, (data) => {
const isBar = this.chart.options.type === 'bar';
const values = data.flatMap(item => item.values);
this.legendEntries = isBar
? values.reduce((pre, cur) => [
...pre,
...(pre.some(d => d.name === cur.x)
? []
: [
{
name: cur.x,
color: cur.color,
activate: true,
hover: false,
value: cur.y,
source: cur,
unit: get(cur, 'unit'),
...cur,
},
]),
], [])
: data.reduce((acc, d) => [
...acc,
...(d.name
? [
{
name: d.name,
color: d.color,
activate: !this.legendInstance?.disabledLegend.has(d.name),
hover: false,
value: d.values?.[d.values?.length - 1]?.y,
source: d,
unit: get(d, 'unit'),
...d,
},
]
: []),
], []);
if (this.legendInstance?.disabledLegend.size) {
this.changeLegend.next(this.legendEntries);
}
this.cdr.markForCheck();
});
this.chart?.on(LEGEND_EVENTS.CLICK, (data) => {
const { legend, source } = data;
const legendItem = this.legendEntries.find(item => item.name === legend.name);
legendItem.activate = !legend.activate;
this.changeLegend.next(source);
});
}
selected(legend) {
this.legendInstance.changeLegend(legend);
}
allSelect(select) {
if (select) {
this.legendInstance.legendSelectAll();
}
else {
this.legendInstance.legendUnselectAll();
}
this.legendInstance.changeLegend(this.legendEntries[0]);
}
static { this.ɵfac = function LegendComponent_Factory(t) { return new (t || LegendComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LegendComponent, selectors: [["acl-base-legend"]], inputs: { symbol: "symbol", template: "template", mode: "mode", translation: "translation", leftOperation: "leftOperation", leftOperationContext: "leftOperationContext", rightOperation: "rightOperation", hideLegend: "hideLegend", selectAllOperation: "selectAllOperation", selectAllName: "selectAllName", chart: "chart" }, outputs: { changeLegend: "changeLegend" }, features: [i0.ɵɵNgOnChangesFeature], decls: 5, vars: 3, consts: [["legendTemplate", ""], ["custom", ""], ["builtinTemplate", ""], ["class", "operation", 4, "ngIf"], ["class", "legend-wrap operation", 4, "ngIf"], [1, "operation"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "legend-wrap", "operation"], [4, "ngIf", "ngIfElse"], [3, "ngTemplateOutlet"], [3, "ngSwitch"], ["class", "legend-vertical", 3, "data", "noData", "legendTemplate", "isCard", 4, "ngSwitchCase"], [1, "legend-vertical", 3, "data", "noData", "legendTemplate", "isCard"], [1, "legend-labels"], ["class", "select-all", 4, "ngIf"], ["class", "legend-label", 3, "disable", "forbid", "title", "click", 4, "ngFor", "ngForOf"], [1, "select-all"], [3, "ngModelChange", "ngModel"], [1, "legend-label", 3, "click", "title"], [3, "ngClass"], [1, "label-name"]], template: function LegendComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, LegendComponent_div_0_Template, 2, 2, "div", 3)(1, LegendComponent_div_1_Template, 4, 2, "div", 4)(2, LegendComponent_div_2_Template, 2, 1, "div", 3)(3, LegendComponent_ng_template_3_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
i0.ɵɵproperty("ngIf", ctx.isTemplateRef(ctx.leftOperation));
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", !ctx.hideLegend);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx.isTemplateRef(ctx.rightOperation));
} }, styles: ["[_nghost-%COMP%]{flex:1;display:flex;justify-content:flex-end;align-items:center}.legend-wrap[_ngcontent-%COMP%]{display:inline-block}.legend-wrap[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .legend-wrap[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:0;margin:0;list-style:none}.legend-wrap[_ngcontent-%COMP%] .legend-labels[_ngcontent-%COMP%]{display:flex}.legend-wrap[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;justify-content:center}.legend-wrap[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]:not(:last-child){margin-right:12px}.legend-wrap[_ngcontent-%COMP%] .forbid[_ngcontent-%COMP%]{cursor:no-drop}.legend-wrap[_ngcontent-%COMP%] .label-name[_ngcontent-%COMP%]{font-size:12px;color:rgb(var(--aui-color-secondary-text))}.legend-wrap[_ngcontent-%COMP%] .label-symbol[_ngcontent-%COMP%]{margin-right:4px}.disable[_ngcontent-%COMP%] .label-symbol[_ngcontent-%COMP%]{background:rgb(var(--aui-color-n-6))!important}.disable[_ngcontent-%COMP%] .label-name[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-6))}.symbol-square[_ngcontent-%COMP%]{width:12px;height:12px;display:inline-block}.symbol-line[_ngcontent-%COMP%]{width:12px;height:2px;display:inline-block}.symbol-circle[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;display:inline-block}.operation[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-left:8px}.select-all[_ngcontent-%COMP%] .aui-checkbox{font-size:12px;line-height:16px;margin-bottom:8px}"], changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LegendComponent, [{
type: Component,
args: [{ selector: 'acl-base-legend', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"operation\"\n *ngIf=\"isTemplateRef(leftOperation)\"\n>\n <ng-container\n [ngTemplateOutlet]=\"leftOperation\"\n [ngTemplateOutletContext]=\"leftOperationContext\"\n ></ng-container>\n</div>\n\n<div\n class=\"legend-wrap operation\"\n *ngIf=\"!hideLegend\"\n>\n <ng-container *ngIf=\"!template; else custom\">\n <ng-container [ngTemplateOutlet]=\"legendTemplate\"></ng-container>\n </ng-container>\n <ng-template #custom>\n <ng-container *ngIf=\"isTemplateRef(template); else builtinTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"$any(template)\"\n [ngTemplateOutletContext]=\"{ context: legendEntries }\"\n ></ng-container>\n </ng-container>\n <ng-template #builtinTemplate>\n <ng-container [ngSwitch]=\"template\">\n <acl-legend-dropdown\n class=\"legend-vertical\"\n *ngSwitchCase=\"'dropdown'\"\n [data]=\"legendEntries\"\n [noData]=\"noData\"\n [legendTemplate]=\"legendTemplate\"\n [isCard]=\"mode === 'card'\"\n >\n </acl-legend-dropdown>\n </ng-container>\n </ng-template>\n </ng-template>\n</div>\n\n<div\n class=\"operation\"\n *ngIf=\"isTemplateRef(rightOperation)\"\n>\n <ng-container [ngTemplateOutlet]=\"rightOperation\"></ng-container>\n</div>\n\n<ng-template #legendTemplate>\n <ul class=\"legend-labels\">\n <li\n class=\"select-all\"\n *ngIf=\"!noData && selectAllOperation && template === 'dropdown'\"\n >\n <aui-checkbox\n [(ngModel)]=\"allSelected\"\n (ngModelChange)=\"allSelect($event)\"\n >\n {{ selectAllName || ('select_all' | translate) }}\n </aui-checkbox>\n </li>\n <li\n class=\"legend-label\"\n [class.disable]=\"!legend.activate || noData\"\n [class.forbid]=\"noData\"\n [title]=\"(legend.activate ? 'click_hide' : 'click_show') | translate\"\n *ngFor=\"let legend of legendEntries\"\n (click)=\"selected(legend)\"\n >\n <span\n [ngClass]=\"[symbolName, 'label-symbol']\"\n [style.background]=\"legend.color\"\n >\n </span>\n <span class=\"label-name\">{{\n translation ? (legend.name | translate) : legend.name\n }}</span>\n </li>\n </ul>\n</ng-template>\n", styles: [":host{flex:1;display:flex;justify-content:flex-end;align-items:center}.legend-wrap{display:inline-block}.legend-wrap ul,.legend-wrap li{padding:0;margin:0;list-style:none}.legend-wrap .legend-labels{display:flex}.legend-wrap .legend-label{display:flex;align-items:center;cursor:pointer;justify-content:center}.legend-wrap .legend-label:not(:last-child){margin-right:12px}.legend-wrap .forbid{cursor:no-drop}.legend-wrap .label-name{font-size:12px;color:rgb(var(--aui-color-secondary-text))}.legend-wrap .label-symbol{margin-right:4px}.disable .label-symbol{background:rgb(var(--aui-color-n-6))!important}.disable .label-name{color:rgb(var(--aui-color-n-6))}.symbol-square{width:12px;height:12px;display:inline-block}.symbol-line{width:12px;height:2px;display:inline-block}.symbol-circle{width:6px;height:6px;border-radius:50%;display:inline-block}.operation{display:flex;justify-content:center;align-items:center;margin-left:8px}.select-all ::ng-deep .aui-checkbox{font-size:12px;line-height:16px;margin-bottom:8px}\n"] }]
}], () => [{ type: i0.ChangeDetectorRef }], { symbol: [{
type: Input
}], template: [{
type: Input
}], mode: [{
type: Input
}], translation: [{
type: Input
}], leftOperation: [{
type: Input
}], leftOperationContext: [{
type: Input
}], rightOperation: [{
type: Input
}], hideLegend: [{
type: Input
}], selectAllOperation: [{
type: Input
}], selectAllName: [{
type: Input
}], chart: [{
type: Input
}], changeLegend: [{
type: Output
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LegendComponent, { className: "LegendComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnZW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy92aWV3LWNoYXJ0L2xlZ2VuZC9sZWdlbmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3ZpZXctY2hhcnQvbGVnZW5kL2xlZ2VuZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsSUFBSSxFQUdKLGFBQWEsRUFDYixVQUFVLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0lDdEJoQyw4QkFHQztJQUNDLDJCQUdnQjtJQUNsQixpQkFBTTs7O0lBSEYsY0FBa0M7SUFDbEMsQUFEQSx1REFBa0Msd0RBQ2M7OztJQVFsRCw2QkFBNkM7SUFDM0MsMkJBQWlFOzs7OztJQUFuRCxjQUFtQztJQUFuQyxvREFBbUM7OztJQUdqRCw2QkFBb0U7SUFDbEUsMkJBR2dCOzs7O0lBRmQsY0FBbUM7SUFDbkMsQUFEQSxrREFBbUMsNkVBQ21COzs7SUFLdEQsMENBUXNCOzs7O0lBRnBCLEFBREEsQUFEQSxBQURBLDJDQUFzQix5QkFDTCxxQ0FDZ0Isa0NBQ1A7OztJQVA5QixpQ0FBb0M7SUFDbEMsbUlBT0M7Ozs7SUFSVywwQ0FBcUI7SUFHOUIsY0FBd0I7SUFBeEIseUNBQXdCOzs7SUFKL0IsQUFOQSxzR0FBb0Usd0hBTXRDOzs7O0lBTmdCLEFBQS9CLDREQUErQixnQ0FBb0I7OztJQVJ0RSw4QkFHQztJQUlD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QUE5QkEsQUFWQSxnRUFHQyxtREFVQSxtREE4QkEsb0dBSTRCOztZQTdDMUIsMkRBQWtDO1lBVWxDLGNBQWlCO1lBQWpCLHNDQUFpQjtZQThCakIsY0FBbUM7WUFBbkMsNERBQW1DOzs7aUZETnpCLGVBQWU7Y0FOM0IsU0FBUzsyQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTtrREFHdEMsTUFBTTtrQkFBZCxLQUFLO1lBRUcsUUFBUTtrQkFBaEIsS0FBSztZQUVHLElBQUk7a0JBQVosS0FBSztZQUVHLFdBQVc7a0JBQW5CLEtBQUs7WUFFRyxhQUFhO2tCQUFyQixLQUFLO1lBRUcsb0JBQW9CO2tCQUE1QixLQUFLO1lBRUcsY0FBYztrQkFBdEIsS0FBSztZQUVHLFVBQVU7a0JBQWxCLEtBQUs7WUFFRyxrQkFBa0I7a0JBQTFCLEtBQUs7WUFFRyxhQUFhO2tCQUFyQixLQUFLO1lBRUcsS0FBSztrQkFBYixLQUFLO1lBRUksWUFBWTtrQkFBckIsTUFBTTs7a0ZBdkJJLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBWaWV3LFxuICBMZWdlbmQgYXMgQ2hhcnRMZWdlbmQsXG4gIExlZ2VuZEl0ZW0sXG4gIExFR0VORF9FVkVOVFMsXG4gIFZJRVdfSE9PS1MsXG4gIENoYXJ0RGF0YSxcbiAgRGF0YSxcbn0gZnJvbSAnQGFsYXVkYS9jaGFydCc7XG5pbXBvcnQgeyBpc1RlbXBsYXRlUmVmIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcblxuZXhwb3J0IGNsYXNzIExlZ2VuZFBheWxvYWQge1xuICBsZWdlbmQ6IExlZ2VuZEl0ZW07XG4gIHNvdXJjZTogTGVnZW5kSXRlbVtdO1xufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLWJhc2UtbGVnZW5kJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xlZ2VuZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xlZ2VuZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGVnZW5kQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzeW1ib2w6ICdjaXJjbGUnIHwgJ3NxdWFyZScgfCAnbGluZScgPSAnbGluZSc7XG5cbiAgQElucHV0KCkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgc3RyaW5nIHwgJ2Ryb3Bkb3duJztcblxuICBASW5wdXQoKSBtb2RlOiAnY2FyZCcgfCAnZGVmYXVsdCcgPSAnZGVmYXVsdCc7XG5cbiAgQElucHV0KCkgdHJhbnNsYXRpb24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGxlZnRPcGVyYXRpb246IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIGxlZnRPcGVyYXRpb25Db250ZXh0OiBTdHJpbmdNYXA7XG5cbiAgQElucHV0KCkgcmlnaHRPcGVyYXRpb246IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIGhpZGVMZWdlbmQ6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgc2VsZWN0QWxsT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2VsZWN0QWxsTmFtZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGNoYXJ0OiBWaWV3O1xuXG4gIEBPdXRwdXQoKSBjaGFuZ2VMZWdlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPExlZ2VuZEl0ZW1bXT4oKTtcblxuICBnZXQgbm9EYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmxlZ2VuZEVudHJpZXM/Lmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5sZWdlbmRFbnRyaWVzO1xuICB9XG5cbiAgZ2V0IGxlZ2VuZEluc3RhbmNlKCk6IENoYXJ0TGVnZW5kIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydD8uZ2V0Q29udHJvbGxlcignbGVnZW5kJyk7XG4gIH1cblxuICBsZWdlbmRFbnRyaWVzOiBMZWdlbmRJdGVtW10gPSBbXTtcblxuICBpc1RlbXBsYXRlUmVmID0gaXNUZW1wbGF0ZVJlZjtcblxuICBhbGxTZWxlY3RlZCA9IHRydWU7XG5cbiAgZ2V0IHN5bWJvbE5hbWUoKSB7XG4gICAgcmV0dXJuIGBzeW1ib2wtJHt0aGlzLnN5bWJvbH1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25DaGFuZ2VzKHsgY2hhcnQgfTogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFydC5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMubGVnZW5kRW50cmllcyA9IHRoaXMubGVnZW5kSW5zdGFuY2U/LmxlZ2VuZEl0ZW1zO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubGVnZW5kRW50cmllcyA9IHRoaXMubGVnZW5kSW5zdGFuY2U/LmxlZ2VuZEl0ZW1zO1xuICAgIHRoaXMuY2hhcnQ/Lm9uKFZJRVdfSE9PS1MuU0VUX0RBVEEsIChkYXRhOiBDaGFydERhdGFbXSkgPT4ge1xuICAgICAgY29uc3QgaXNCYXIgPSB0aGlzLmNoYXJ0Lm9wdGlvbnMudHlwZSA9PT0gJ2Jhcic7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLmZsYXRNYXAoaXRlbSA9PiBpdGVtLnZhbHVlcykgYXMgQXJyYXk8XG4gICAgICAgIERhdGE8eyB4OiBzdHJpbmc7IGNvbG9yOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgeTogbnVtYmVyIH0+XG4gICAgICA+O1xuICAgICAgdGhpcy5sZWdlbmRFbnRyaWVzID0gaXNCYXJcbiAgICAgICAgPyB2YWx1ZXMucmVkdWNlPEFycmF5PERhdGE8TGVnZW5kSXRlbT4+PihcbiAgICAgICAgICAgIChwcmUsIGN1cikgPT4gW1xuICAgICAgICAgICAgICAuLi5wcmUsXG4gICAgICAgICAgICAgIC4uLihwcmUuc29tZShkID0+IGQubmFtZSA9PT0gY3VyLngpXG4gICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VyLngsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGN1ci5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBob3ZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGN1ci55LFxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogY3VyLFxuICAgICAgICAgICAgICAgICAgICAgIHVuaXQ6IGdldChjdXIsICd1bml0JyksXG4gICAgICAgICAgICAgICAgICAgICAgLi4uY3VyLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgKVxuICAgICAgICA6IGRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZCkgPT4gW1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIC4uLihkLm5hbWVcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZC5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZTogIXRoaXMubGVnZW5kSW5zdGFuY2U/LmRpc2FibGVkTGVnZW5kLmhhcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZC52YWx1ZXM/LltkLnZhbHVlcz8ubGVuZ3RoIC0gMV0/LnksXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBkLFxuICAgICAgICAgICAgICAgICAgICAgIHVuaXQ6IGdldChkLCAndW5pdCcpLFxuICAgICAgICAgICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgKTtcbiAgICAgIGlmICh0aGlzLmxlZ2VuZEluc3RhbmNlPy5kaXNhYmxlZExlZ2VuZC5zaXplKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlTGVnZW5kLm5leHQodGhpcy5sZWdlbmRFbnRyaWVzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydD8ub24oTEVHRU5EX0VWRU5UUy5DTElDSywgKGRhdGE6IExlZ2VuZFBheWxvYWQpID0+IHtcbiAgICAgIGNvbnN0IHsgbGVnZW5kLCBzb3VyY2UgfSA9IGRhdGE7XG4gICAgICBjb25zdCBsZWdlbmRJdGVtID0gdGhpcy5sZWdlbmRFbnRyaWVzLmZpbmQoXG4gICAgICAgIGl0ZW0gPT4gaXRlbS5uYW1lID09PSBsZWdlbmQubmFtZSxcbiAgICAgICk7XG4gICAgICBsZWdlbmRJdGVtLmFjdGl2YXRlID0gIWxlZ2VuZC5hY3RpdmF0ZTtcbiAgICAgIHRoaXMuY2hhbmdlTGVnZW5kLm5leHQoc291cmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdGVkKGxlZ2VuZDogTGVnZW5kSXRlbSkge1xuICAgIHRoaXMubGVnZW5kSW5zdGFuY2UuY2hhbmdlTGVnZW5kKGxlZ2VuZCk7XG4gIH1cblxuICBhbGxTZWxlY3Qoc2VsZWN0OiBib29sZWFuKSB7XG4gICAgaWYgKHNlbGVjdCkge1xuICAgICAgdGhpcy5sZWdlbmRJbnN0YW5jZS5sZWdlbmRTZWxlY3RBbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWdlbmRJbnN0YW5jZS5sZWdlbmRVbnNlbGVjdEFsbCgpO1xuICAgIH1cbiAgICB0aGlzLmxlZ2VuZEluc3RhbmNlLmNoYW5nZUxlZ2VuZCh0aGlzLmxlZ2VuZEVudHJpZXNbMF0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwib3BlcmF0aW9uXCJcbiAgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGxlZnRPcGVyYXRpb24pXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxlZnRPcGVyYXRpb25cIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJsZWZ0T3BlcmF0aW9uQ29udGV4dFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwibGVnZW5kLXdyYXAgb3BlcmF0aW9uXCJcbiAgKm5nSWY9XCIhaGlkZUxlZ2VuZFwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGVtcGxhdGU7IGVsc2UgY3VzdG9tXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsZWdlbmRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b20+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGVtcGxhdGVSZWYodGVtcGxhdGUpOyBlbHNlIGJ1aWx0aW5UZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KHRlbXBsYXRlKVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbnRleHQ6IGxlZ2VuZEVudHJpZXMgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNidWlsdGluVGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0ZW1wbGF0ZVwiPlxuICAgICAgICA8YWNsLWxlZ2VuZC1kcm9wZG93blxuICAgICAgICAgIGNsYXNzPVwibGVnZW5kLXZlcnRpY2FsXCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXG4gICAgICAgICAgW2RhdGFdPVwibGVnZW5kRW50cmllc1wiXG4gICAgICAgICAgW25vRGF0YV09XCJub0RhdGFcIlxuICAgICAgICAgIFtsZWdlbmRUZW1wbGF0ZV09XCJsZWdlbmRUZW1wbGF0ZVwiXG4gICAgICAgICAgW2lzQ2FyZF09XCJtb2RlID09PSAnY2FyZCdcIlxuICAgICAgICA+XG4gICAgICAgIDwvYWNsLWxlZ2VuZC1kcm9wZG93bj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cIm9wZXJhdGlvblwiXG4gICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihyaWdodE9wZXJhdGlvbilcIlxuPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJpZ2h0T3BlcmF0aW9uXCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsZWdlbmRUZW1wbGF0ZT5cbiAgPHVsIGNsYXNzPVwibGVnZW5kLWxhYmVsc1wiPlxuICAgIDxsaVxuICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsXCJcbiAgICAgICpuZ0lmPVwiIW5vRGF0YSAmJiBzZWxlY3RBbGxPcGVyYXRpb24gJiYgdGVtcGxhdGUgPT09ICdkcm9wZG93bidcIlxuICAgID5cbiAgICAgIDxhdWktY2hlY2tib3hcbiAgICAgICAgWyhuZ01vZGVsKV09XCJhbGxTZWxlY3RlZFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImFsbFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAge3sgc2VsZWN0QWxsTmFtZSB8fCAoJ3NlbGVjdF9hbGwnIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgPC9hdWktY2hlY2tib3g+XG4gICAgPC9saT5cbiAgICA8bGlcbiAgICAgIGNsYXNzPVwibGVnZW5kLWxhYmVsXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlXT1cIiFsZWdlbmQuYWN0aXZhdGUgfHwgbm9EYXRhXCJcbiAgICAgIFtjbGFzcy5mb3JiaWRdPVwibm9EYXRhXCJcbiAgICAgIFt0aXRsZV09XCIobGVnZW5kLmFjdGl2YXRlID8gJ2NsaWNrX2hpZGUnIDogJ2NsaWNrX3Nob3cnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAqbmdGb3I9XCJsZXQgbGVnZW5kIG9mIGxlZ2VuZEVudHJpZXNcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdGVkKGxlZ2VuZClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtuZ0NsYXNzXT1cIltzeW1ib2xOYW1lLCAnbGFiZWwtc3ltYm9sJ11cIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJsZWdlbmQuY29sb3JcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1uYW1lXCI+e3tcbiAgICAgICAgdHJhbnNsYXRpb24gPyAobGVnZW5kLm5hbWUgfCB0cmFuc2xhdGUpIDogbGVnZW5kLm5hbWVcbiAgICAgIH19PC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuIl19